C# 当焦点丢失时,Datagridview单元格将丢失输入值

C# 当焦点丢失时,Datagridview单元格将丢失输入值,c#,data-binding,datagridview,cells,C#,Data Binding,Datagridview,Cells,我有一个datagridview,我用一个列表绑定了它。因此,列是动态生成的。这是它的代码 var result = (from gd in db.grades join std in db.students on gd.studentID equals std.studentID where gd.courseID == courseID select new

我有一个
datagridview
,我用一个列表绑定了它。因此,列是动态生成的。这是它的代码

var result = (from gd in db.grades
              join std in db.students
              on gd.studentID equals std.studentID
              where gd.courseID == courseID
              select new
              {
                 Name = std.studentName,
                 Registration = std.studentID,
                 QA = gd.QA,
                 S1 = gd.S1,
                 S2 = gd.S2,
                 Final = gd.Final                                  
              }).ToList();
dataGridView1.DataSource = result;
现在,默认情况下,单元格是
ReadOnly==true
,这很好,但是当用户选择一个单元格时,它应该是可编辑的,所以我要做的是在
CellDoubleClickEvent
中,我将该特定单元格的模式设置为
ReadOnly=true
。以下是
CellDoubleClickEvent

private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
{            
    dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex].ReadOnly = false;
}
这样做可以使单元格可编辑,但在编辑单元格并单击其他位置(散焦)后,输入(编辑)值将丢失


我想保留输入(单元格中编辑的值),以便以后可以使用它,如保存等

您应该引发DataGridViewRowStateChanged事件,以提醒DataGridView行已更改。然后,您应该为此提供处理程序,以确保更改后的数据被优雅地传播回DataGridViewRow。

我也遇到过同样的问题,为此我使用了一种解决方法。 我将ComboxCell与SelectedIndexChange事件绑定 例如,
cbo.SelectedIndexChanged+=新事件处理程序(ComBox\u SelectedIndexChanged)

在该方法中,我获取了新值,将其从数据源中删除,并使用列表方法Insert(pos,value)将其放回第一个位置,然后在单元格格式化事件中,我将该单元格的值设置为数据源的第一个值,如下所示:

if ((e.ColumnIndex == 4) && ((DataGridViewCell)dataGrid[e.ColumnIndex, e.RowIndex]).GetType() == typeof(DataGridViewComboBoxCell))  //check for ur comboboxcell index
        {
            DataGridViewComboBoxCell cell = (DataGridViewComboBoxCell)dataGrid[e.ColumnIndex, e.RowIndex];
            if (cell.DataSource != null)
            {
                List<string> values = (List<string>)cell.DataSource;
                if (values.Count > 0)
                {
                    e.Value = values[0];
                    e.FormattingApplied = true;
                }
            }
        }
if((e.ColumnIndex==4)和((DataGridViewCell)dataGrid[e.ColumnIndex,e.RowIndex])。GetType()==typeof(DataGridViewComboxCell))//检查ur ComboxCell索引
{
DataGridViewComboBoxCell=(DataGridViewComboxCell)dataGrid[e.ColumnIndex,e.RowIndex];
if(cell.DataSource!=null)
{
列表值=(列表)cell.DataSource;
如果(values.Count>0)
{
e、 值=值[0];
e、 FormattingApplied=true;
}
}
}
希望它对你有用