如何在datagridview中添加新行并在C#winform中编辑它?

时间:2017-08-07 06:56:10

标签: c# winforms datagridview

我已将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中添加,编辑和删除,而无需使用任何表格吗?

2 个答案:

答案 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。我发现这使得在保存之前验证条目变得容易得多。不仅如此,更容易为特定数据类型提供专门的控件,日期是一个很好的例子。我知道人们喜欢电子表格类型“外观和感觉”的便利性,但数据库应用程序应该首先保持数据完整性。