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;
}
}
}
希望它对你有用