2017-08-07 81 views
0

我已經將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中刪除而不使用任何形式?

+0

您是否檢查過此文件:http://www.c-sharpcorner.com/UploadFile/1e050f/insert-update-and-delete-record-in-datagridview-C-Sharp/。它涵蓋了大部分的datagridview操作 –

+0

@SouvikGhosh這個例子有一個表格來填充插入,但我想添加一行到我現有的datagridview,添加數據並保存 –

回答

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; 
    } 
} 
0

我假設你的問題在這裏,是你希望其餘的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將在此時刷新。我發現這使得在保存前驗證條目變得容易得多。不僅如此,爲特定數據類型提供專門的控件要容易得多,日期就是一個很好的例子。我知道人們喜歡電子表格類型「外觀和便利性」的便利性,但數據庫應用程序應首先將數據完整性。

相關問題