[英]How to add a new row to the datagridview and edit it in C# winform?
我已经将datagridview的数据源设置为数据集。 我想向此datagridview添加新行。 新行应该是可编辑的,我需要将此数据保存到数据库中。 我该如何实现?
//数据源已设置
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;
}
//这会创建一个新行,但不可编辑。
PS我是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的其余部分为ReadOnly? 不幸的是,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。 我发现这使保存之前验证条目变得容易得多。 不仅如此,为特定数据类型提供专门的控件要容易得多,日期是一个很好的例子。 我知道人们喜欢电子表格类型“外观”的便利,但是数据库应用程序应该将数据完整性放在首位。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.