C# 如何自动结束DataGridView单元格编辑模式?

C# 如何自动结束DataGridView单元格编辑模式?,c#,winforms,datagridview,cell,C#,Winforms,Datagridview,Cell,这是我上一个问题的后续问题。你可以找到它 在最终解决上一个问题后,我遇到了另一个问题,当我在DataGrid中指定按钮将值添加到新行时,整个单元格将处于编辑模式,直到我单击其他单元格并填充它和/或使用选项卡直到行的末尾(显然这一行不起作用),然后它将结束编辑模式。 我使用的是dataGridView.BeginEdit(true)开始编辑模式,以便我可以将值解析到文本框中(请参见我前面的问题)。因此,如果我插入另一个值并按下按钮,新值将替换以前插入的旧值,因为它当前仍处于编辑模式。 我试图使用d

这是我上一个问题的后续问题。你可以找到它

在最终解决上一个问题后,我遇到了另一个问题,当我在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从数据源拖放到我的windows窗体中。然后它自动成为一个数据网格,属性名为
surat_JalandagRidView
,数据源为
surat_jalanBindingSource

很抱歉延迟。在了解如何设置与DataGridView的绑定后,我肯定可以为您提供更好的指导,指导您如何编辑网格绑定到的数据。当您从Visual Studio的“数据源”视图中拖动表并将其放在DataGridView上时,Visual Studio为您做了几件事。这就是导入ant希望您至少了解所做工作的基本知识,以便了解如何继续操作数据。
MSDN文章如何从Visual Studio设置与windows窗体控件的绑定。最后一节介绍了您正在执行的操作。最后一句话“DataGridView控件现在绑定到您拖到它上面的表。组件托盘中会显示DataSet、TableAdapter和BindingSource。”是重要的。由于Visual Studio生成了将控件绑定到表的代码,因此您应该直接编辑数据以更新数据网格视图。在这种情况下,您应该使用生成的数据集(我假设它的名称为surat_jalanDataSet).是关于如何编辑数据集中数据的说明。针对您的具体情况。请告诉我这是否有助于实现您的目标。

我强制单元格退出编辑模式的方法是切换CurrentCell.ReadOnly属性

this.dataGridView.EndEdit();
this.dataGridView.CurrentCell.ReadOnly = !dataGridView.CurrentCell.ReadOnly;
this.dataGridView.CurrentCell.ReadOnly = !dataGridView.CurrentCell.ReadOnly;
类似的技术适用于没有显式和功能性EndEdit或Commit类型方法的其他组件

例如,您可以通过切换DateTimePicker.Enabled属性来结束DateTimePicker的文本编辑模式

this.dataGridView.EndEdit();
this.dataGridView.CurrentCell.ReadOnly = !dataGridView.CurrentCell.ReadOnly;
this.dataGridView.CurrentCell.ReadOnly = !dataGridView.CurrentCell.ReadOnly;

//AJ

你也可以使用
这个。在你的winformI上验证
,我已经试过了Gabriel,但也不起作用。不过还是要谢谢你:当你总是在之后调用endedit时,为什么要使用beginedit。你只需设置你的值,而不用进入编辑模式。编辑模式是让用户输入输入的。嗯,我尝试删除了beginedit和endedit来自代码。令人惊讶的是,它没有任何区别:(此时,beginedit和endedit是无用的。您的
DataGridView
datasource
是什么?您当前正在将新行添加到一个新的
DataTable
,这毫无意义。您应该添加到当前数据源。