这是我之前的一个跟进问题。你可以找到它here。
我在最后一次解决之前遇到了另一个问题,当我分配按钮将值添加到DataGrid中的新行时,整个单元格将处于编辑模式,直到我点击其他单元格并填充它和/或者标签直到行的末尾(显然这个不起作用),然后它将结束编辑模式。
我正在使用dataGridView.BeginEdit(true);
开始编辑模式,以便我可以将值解析到文本框中(请参阅我之前的问题)。因此,如果我插入另一个值并按下按钮,新值将替换之前插入的旧值,因为它当前仍处于编辑模式。
我试图使用dataGridView.EndEdit();
,dataGridView.EndEdit(DataGridViewDataErrorContexts.Commit);
,cell.DataGridView.EndEdit()
和cell.DataGridView.EndEdit(DataGridViewDataErrorContexts.Commit);
,但显然不会结束编辑模式:(
我想要的是当我按下按钮时,文本框内的值将被插入第一个文本框列(这个已经工作)。然后,我不必单击或填充其他列以结束编辑模式。所以,我只需在文本框中键入任何内容,然后按下按钮直到我想停止。之后我开始填写另一列。
有谁知道如何解决这个问题?
编辑1:你看到了区别吗?看看红色圆圈,顶部的一个目前处于编辑模式(因为它在箭头后面有一个*)。底部不在编辑模式(我通过从组合框中选择一个项目手动完成)。
以下是我上一个问题所要求的代码:
private void button1_Click(object sender, EventArgs e)
{
this.surat_jalanDataGridView.AllowUserToAddRows = true;
string tokNum = this.textBox1.Text;
if (this.textBox1.Text != "")
{
foreach (DataGridViewRow sjRow in this.surat_jalanDataGridView.Rows)
{
int RowIndex = surat_jalanDataGridView.RowCount - 1;
DataGridViewRow R = surat_jalanDataGridView.Rows[RowIndex];
DataTable table = new DataTable();
DataRow newRow = table.NewRow();
table.Rows.Add(newRow);
DataGridViewCell cell = R.Cells[2];
this.surat_jalanDataGridView.CurrentCell = cell;
this.surat_jalanDataGridView.BeginEdit(true);
R.Cells[2].Value = tokNum;
cell.DataGridView.EndEdit(DataGridViewDataErrorContexts.Commit);
}
}
this.surat_jalanDataGridView.EndEdit(DataGridViewDataErrorContexts.Commit);
}
编辑2:所以,我将surat_jalan从数据源拖放到我的窗体中。然后它会自动成为属性名为surat_jalanDataGridView
的数据网格,数据源为surat_jalanBindingSource
答案 0 :(得分:1)
对此延迟表示抱歉。在看到如何设置与DataGridView的绑定之后,我可以明确地为您提供有关如何编辑网格绑定的数据的更好指导。当您从Visual Studio中的数据源视图中拖动表并将其放在DataGridView上时,Visual Studio会为您做几件事。重要的是,您至少要了解所做工作的基础知识,以便了解如何操作数据。 This MSDN文章如何设置从Visual Studio到Windows窗体控件的绑定。最后一节描述了您正在做的事情。最后一句“DataGridView控件现在绑定到您拖动到它上面的表.DataSet,TableAdapter和BindingSource出现在组件托盘中。”是重要的。由于Visual Studio生成的代码将控件绑定到表中,因此应直接编辑数据以更新数据网格视图。在这种情况下,您应该使用生成的DataSet(我假设它被命名为surat_jalanDataSet)。 Here描述了如何编辑DataSet中的数据。对于您的具体案例Adding Rows。如果这有助于您实现目标,请告诉我。
答案 1 :(得分:0)
我要使Cell退出EditMode的方法是切换CurrentCell.ReadOnly属性。
this.dataGridView.EndEdit();
this.dataGridView.CurrentCell.ReadOnly = !dataGridView.CurrentCell.ReadOnly;
this.dataGridView.CurrentCell.ReadOnly = !dataGridView.CurrentCell.ReadOnly;
类似的技术可与其他没有显式且功能正常的EndEdit或Commit类型方法的组件一起使用。
例如,您可以通过切换其dateTimePicker.Enabled属性来结束DateTimePicker的文本编辑模式。
// AJ