2011-08-17 127 views
0

我想添加一個新的項目到我的datagridview。我知道可以使用幾個文本框和一個按鈕來實現這一點。當用戶點擊這個按鈕時,它會添加一個新項目到數據庫並刷新我的datagridview。C#Winform DataGridView內聯添加新行

我想知道如果我可以使用我的datagridview的最後一行來添加一個新的項目。我怎樣才能做到這一點?

回答

2

你使用RAD-Databind(winform上的數據源)嗎?如果是這樣,它可能有點棘手。 您應該將數據加載到單獨的圖層中(如果可以的話,不要在代碼隱藏中)。那麼在本地數據中添加另一行應該相當簡單。

正如您所問:這是一個非常簡單的示例。 我使用相同的通用數據:

public struct SimpleData 
{ 
    public int Id { get; set; } 
    public string Text { get; set; } 
} 

,並通過初始化一個名爲GridView控件的DataGridView:

 var bindingSource = new BindingSource(); 
     bindingSource.Add(new SimpleData {Id = 1, Text = "Hello"}); 
     bindingSource.Add(new SimpleData {Id = 2, Text = "World"}); 
     GridView.DataSource = bindingSource; 

那麼你可以簡單地通過

 var data = GridView.DataSource as BindingSource; 
     data.Add(new SimpleData{Id=3, Text="!!! added"}); 

添加另一排在真實世界的例子,我會使用一些衆所周知的圖案: MVVM for WinformsMVP for Winforms 從邏輯上分離視圖。但畢竟重要的一點是使用某種Bindingsource(通知網格數據已經改變),或者如果您選擇使用像List或類似的簡單數據容器,則將更改後的數據重新提交給DataSource。

+0

感謝您的回覆。你有考試代碼嗎? – user609511 2011-08-17 12:21:01

0

或者,

你可以你的DataGridView綁定到WrapperObject的Generic.List(或任何你想調用類),其中WrapperObject的每個實例可以代表已經在數據庫中的記錄之一,公開其屬性,或代表「空白記錄」。

在DataGridView的EditingControlShowing事件處理程序中,您可以確定用戶是否正在輸入最後一行(因爲它是唯一包含空白部分的行)並執行任何您需要執行的操作來添加零件數據庫。

如果要更新DataGridView上的內容,只需從要顯示的記錄中重新創建WrapperObjects的新列表,然後添加一個以表示最後的空白記錄,以便它顯示在底部,然後將DataGridView的數據源設置爲新列表。