簡體   English   中英

如何將新行添加到datagridview並在C#winform中對其進行編輯?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM