我已将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;
}
//这会创建一个新行,但不可编辑。
P.S。我是C#的初学者
编辑:任何人都可以提供一个链接/示例,我可以直接在datagridview中添加,编辑和删除,而无需使用任何表格吗?
答案 0 :(得分: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;
}
}
答案 1 :(得分:0)
我在这里假设您的问题,是您希望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。我发现这使得在保存之前验证条目变得容易得多。不仅如此,更容易为特定数据类型提供专门的控件,日期是一个很好的例子。我知道人们喜欢电子表格类型“外观和感觉”的便利性,但数据库应用程序应该首先保持数据完整性。