【问题标题】:Datagridview cell loses input value when focus is lost失去焦点时Datagridview单元格丢失输入值
【发布时间】:2014-07-14 16:29:45
【问题描述】:

我有一个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;
}

这有效,使单元格可编辑,但在单元格被编辑后,我点击其他地方(失去焦点)输入(编辑)值丢失。

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

【问题讨论】:

    标签: c# data-binding datagridview cells


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      在该方法中,我获取了新值,将其从数据源中删除并使用 List 方法 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;
                      }
                  }
              }
      

      希望它对你有用。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-09-17
        • 2016-10-22
        • 2023-03-27
        • 2018-07-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多