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

时间:2012-01-05 01:53:48

标签: c# winforms datagridview cell

这是我之前的一个跟进问题。你可以找到它here

我在最后一次解决之前遇到了另一个问题,当我分配按钮将值添加到DataGrid中的新行时,整个单元格将处于编辑模式,直到我点击其他单元格并填充它和/或者标签直到行的末尾(显然这个不起作用),然后它将结束编辑模式。 我正在使用dataGridView.BeginEdit(true);开始编辑模式,以便我可以将值解析到文本框中(请参阅我之前的问题)。因此,如果我插入另一个值并按下按钮,新值将替换之前插入的旧值,因为它当前仍处于编辑模式。 我试图使用dataGridView.EndEdit();dataGridView.EndEdit(DataGridViewDataErrorContexts.Commit);cell.DataGridView.EndEdit()cell.DataGridView.EndEdit(DataGridViewDataErrorContexts.Commit);,但显然不会结束编辑模式:( 我想要的是当我按下按钮时,文本框内的值将被插入第一个文本框列(这个已经工作)。然后,我不必单击或填充其他列以结束编辑模式。所以,我只需在文本框中键入任何内容,然后按下按钮直到我想停止。之后我开始填写另一列。 有谁知道如何解决这个问题? sample image 编辑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 img 2

2 个答案:

答案 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