9

我在 C# 3.5 的 WinForm 应用程序中有一个 DataGridView。

AllowUserToAddNewRow属性设置为真。当用户在 DataGridView 中键入任何文本时,会自动将另一个新行添加到 DataGridView。在对当前行执行一些检查并且在那里填写所有必要信息之前,我不希望添加这个新行。

示例:我有一个带有空白行的 DataGridView: DataGridView 有一个空白行

当我开始输入一个新行时,这还为时过早:

我想要的是仅在用户输入数量后才添加新行:

4

5 回答 5

5

Set AllowUserToAddNewRow = false 现在首先向您的数据源添加一个空白行,例如。如果您将 DataGridView 绑定到名为 DT 的 DataTable,那么就在之前

dataGridView1.DataSource = DT;

做类似的事情

 DT.Rows.Add(DT.NewRow());

这是最初有一个空白行,以便可以输入第一条记录。然后处理事件 dataGridView1.CellEndEdit,在该事件中编写如下内容:

void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
    {
        if (e.ColumnIndex == 1)//The index of your Quantity Column
        {
            int qty = (int)DT.Rows[e.RowIndex][e.ColumnIndex];
            if (qty > 0)//Your logic if required
            {
                DT.Rows.Add(DT.NewRow());                    
            }
        }
    }
于 2012-04-03T07:06:52.893 回答
3

基本上,这是一个简单的游戏,包含一些事件并启用/禁用 AllowUserToAddRow 属性:

public Form1()
        {
            InitializeComponent();
            //creating a test DataTable and adding an empty row
            DataTable dt = new DataTable();
            dt.Columns.Add("Column1");
            dt.Columns.Add("Column2");
            dt.Rows.Add(dt.NewRow());

            //binding to the gridview
            dataGridView1.DataSource = dt;

            //Set  the property AllowUserToAddRows to false will prevent a new empty row
            dataGridView1.AllowUserToAddRows = false;
        }

现在事件...当单元格识别编辑时,它将触发一个名为 CellBeginEdit 的事件。当它处于编辑模式时,将 AllowUserToAddRows 设置为 false

private void dataGridView1_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e)
{
    dataGridView1.AllowUserToAddRows = false;
}

当单元格识别到编辑结束时,它将触发一个名为 CellEndEdit 的事件。当它结束编辑模式时,请检查您的条件。根据结果​​将 AllowUserToAddRows 设置为 true 或将其保持为 false。

private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
{
    //instead of MessageBox there could be as well your check conditions
    if (MessageBox.Show("Cell edit finished, add a new row?", "Add new row?", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
        dataGridView1.AllowUserToAddRows = true;
    else dataGridView1.AllowUserToAddRows = false;
}
于 2016-02-28T22:45:49.107 回答
1

我知道这是旧的。最简单的方法是,从设计视图中取消选中“启用添加”

在此处输入图像描述

于 2015-07-05T02:30:06.223 回答
0

这就是它的实现方式。

a) 您可以使用 RowLeave 事件检查当前行的内容

String.IsNullOrWhiteSpace(GridPGLog.Rows[e.RowIndex].Cells[0].value.toString())
using (or) Cells[0] || cells[1] || cell[2] || ..

如果发现任何错误,将焦点设置到错误单元格并强制用户输入数据。

DataGridViewRow rowToSelect = this.dgvJobList.CurrentRow;
rowToSelect.Selected = true;
rowToSelect.Cells[0].Selected = true;
this.dgvJobList.CurrentCell = rowToSelect.Cells[0];

b) 或者您可以放置​​一个保存按钮并使用 foreach 循环检查所有新添加的行

于 2012-04-03T08:16:38.247 回答
0

I think on the event CellClick you can check in which column you are and then add a new row, something like : DataGridView1.Rows.Add()

于 2012-04-03T06:47:22.930 回答