2017-08-07 79 views
0

我已经将datagridview的数据源设置为数据集。我想添加一个新的行到这个datagridview。这个新行应该是可编辑的,我需要将这些数据保存到我的数据库中。我怎样才能做到这一点?如何将新行添加到datagridview并在C#winform中进行编辑?

//数据源设置

dataGridView.DataSource = ds.Tables[0]; 

//添加新行

private void button_add_Click(object sender, EventArgs e) 
{ 
    DataTable dt = dataGridView.DataSource as DataTable; 
    dt.Rows.Add(); 
    dataGridView.DataSource = dt; 
} 

//这将创建一个新的行,但它是不可编辑。

P.S.我是一个初学者在C#

编辑:任何人都可以请提供一个链接/示例,我可以直接添加,编辑,从datagridview中删除而不使用任何形式?

+0

您是否检查过此文件:http://www.c-sharpcorner.com/UploadFile/1e050f/insert-update-and-delete-record-in-datagridview-C-Sharp/。它涵盖了大部分的datagridview操作 –

+0

@SouvikGhosh这个例子有一个表格来填充插入,但我想添加一行到我现有的datagridview,添加数据并保存 –

回答

0
private void button_add_Click(object sender, EventArgs e) { 
    foreach (DataGridViewRow row in DataGridView1.Rows) { 
     if (// condition for true) { 
      row.Rows[row that should be editable].ReadOnly = true; 
     } else if(// condition for false) { 
      row.Rows[row that schould not be editable].ReadOnly = false; 
     } 
     var value = row.Cells[cellindex].Value; 
    } 
} 
0

我假设你的问题在这里,是你希望其余的DataGridView是只读吗?不幸的是,AllowUserToAddRows和ReadOnly这两个属性是矛盾的,如果ReadOnly为true,那么AllowUserToAddRows确实会给出一个新行,但不能编辑它。

所以,如果你真的想这样做,那么你需要有点创意。有不止一种方式,但这样的事情应该工作。将AllowUserToAddRows设置为true,并将ReadOnly设置为false。添加一个私有字段:

private int addedRowIndex = -1; 

下一页添加几个事件:

private void dataGridView1_UserAddedRow(object sender, DataGridViewRowEventArgs e) 
{ 
    addedRowIndex = dataGridView1.NewRowIndex - 1; 
} 

private void dataGridView1_CellBeginEdit(object sender, DataGridViewCellCancelEventArgs e) 
    { 
     if (!dataGridView1.Rows[e.RowIndex].IsNewRow) 
     { 
      if (addedRowIndex != e.RowIndex) 
      { 
       e.Cancel = true; 
      } 
     } 
    } 
} 

这将取消所有改变旧行的效果。

但请注意,我从来没有做过这样的事情。我有很多很多的DataGridViews窗体,它们总是ReadOnly为true,AllowUserToAddRows为false。为了添加新的记录,我提供了一个按钮,打开一个模式窗体,允许用户输入新的记录。然后将此记录保存到数据库,并关闭表单,DataGridView将在此时刷新。我发现这使得在保存前验证条目变得容易得多。不仅如此,为特定数据类型提供专门的控件要容易得多,日期就是一个很好的例子。我知道人们喜欢电子表格类型“外观和便利性”的便利性,但数据库应用程序应首先将数据完整性。

相关问题