当控件是数据绑定时,无法以编程方式将行添加到datagridview的行集合中

Aur*_*nto 17 c# datagridview winforms

首先,我在这里查找了这个相关的问题, 但解决方案dataGridView1.Rows.Add()在我的情况下不起作用.

在我的Datagridview中,我有3个TextBox用于数据输入,2个ComboBox用于用户选择值(绑定到数据库中).我的一个TextBox被设置为只读,以便用户只能在数据网格外部填充它(使用普通的TexBox和一个Button).

当用户用数据填充DataGridView时,底部总是有一个空行; 所以我禁用了这个,我使用此代码来防止用户在datagrid中添加新行...

dataGridView1.AllowUserToAddRows = false
Run Code Online (Sandbox Code Playgroud)

我只想在用户单击上面提到的按钮时添加一个新行(这会引发错误).

我得到的错误信息是:

"当控件是数据绑定时,无法以编程方式将行添加到datagridview的行集合中"

样本图像 带有红色箭头的那个是ComboBox,带有绿色箭头的那个是只读的TextBox

Ker*_*y H 24

看起来好像您正在使用DataGridView的DataSource属性.当此属性用于绑定到数据时,您无法直接向DataGridView显式添加行.您必须直接向数据源添加行.

例如,如果您的数据源是DataTable,则使用分配给DataSource属性的DataTable(未测试):

private void AddARow(DataTable table)
{
    // Use the NewRow method to create a DataRow with 
    // the table's schema.
    DataRow newRow = table.NewRow();

    // Add the row to the rows collection.
    table.Rows.Add(newRow);
}
Run Code Online (Sandbox Code Playgroud)

  • 请注意,您也可以在顶部添加:`dt.Rows.InsertAt(row,0);` (2认同)

小智 13

你可以得到DataGridViewDataSource,并投它作为一个DataTable.

然后添加一个新的DataRow并设置字段的值.

将新行添加到DataTable和接受更改.

在C#中它会是这样的:

DataTable dataTable = (DataTable)dataGridView.DataSource;
DataRow drToAdd = dataTable.NewRow();

drToAdd["Field1"] = "Value1";
drToAdd["Field2"] = "Value2";

dataTable.Rows.Add(drToAdd);
dataTable.AcceptChanges();
Run Code Online (Sandbox Code Playgroud)