当焦点丢失时,Datagridview单元格会丢失输入值

时间:2014-05-25 23:41:15

标签: 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
              {
                 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;
}

工作,使单元格可编辑,但在单元格编辑后我点击其他地方(松散焦点)输入(编辑)值丢失。

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

2 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

我遇到了同样的问题,我用了一个解决方法。 我将我的组合框与SelectedIndexChange事件绑定在一起 例如。 cbo.SelectedIndexChanged += new EventHandler(ComBox_SelectedIndexChanged);

并且在该方法中,我使用新的值,将其从数据源中删除,并使用List<>将其推回到第一个位置。方法插入(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;
                }
            }
        }

希望它适用于你。