如何将新行添加到datagridview并在C#winform中进行编辑?
我已经将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中删除而不使用任何形式?
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;
}
}
我假设你的问题在这里,是你希望其余的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将在此时刷新。我发现这使得在保存前验证条目变得容易得多。不仅如此,为特定数据类型提供专门的控件要容易得多,日期就是一个很好的例子。我知道人们喜欢电子表格类型“外观和便利性”的便利性,但数据库应用程序应首先将数据完整性。
您是否检查过此文件:http://www.c-sharpcorner.com/UploadFile/1e050f/insert-update-and-delete-record-in-datagridview-C-Sharp/。它涵盖了大部分的datagridview操作 –
@SouvikGhosh这个例子有一个表格来填充插入,但我想添加一行到我现有的datagridview,添加数据并保存 –