DataGridView中的Combobox的應用在WinForm中DataGridView可謂是應用比較多的數(shù)據(jù)顯示控件了,DataGridView中可以應用各種控件,關(guān)于這樣的文章網(wǎng)上 已有很多。都是實例化一個控件然后通過DataGridView.Controls.Add()方法綁定控件。然后通過特定的事伯執(zhí)行數(shù)據(jù)綁定與操作,。 這幾天在做項目的時候也也用到的DataGridView控件,而且需要要DataGridView使用ComboBox來動態(tài)的顯示數(shù)據(jù),。查了不少 的資料來完成DataGridView中的ComboBox的數(shù)據(jù)綁定,,多數(shù)都是通過嚴設(shè)置在WinForm中的窗體InitializeComponent()中來設(shè) 置ComboBox對象的DataSource、DisplayMember,、ValueMember的值來實現(xiàn)數(shù)據(jù)綁定,,可是這樣并不能實現(xiàn)每行不同的數(shù)據(jù)進 行綁定。在查看MSDN的時候我發(fā)現(xiàn)一個對象是DataGridViewComboBoxCell ,。MSDN上這樣說的: DataGridViewComboBoxCell 類是用于顯示組合框控件(即組合了列表選擇字段的編輯字段)的 DataGridViewCell 的專用類型,。 當前選定的 DataGridViewComboBoxCell 承載一個 DataGridViewComboBoxEditingControl,用戶可在其中更改單元格的值 (假設(shè)單元格的 ReadOnly 屬性設(shè)置為 false),。 與 ComboBox 控件不同,,DataGridViewComboBoxCell 沒有 SelectedIndex 和 SelectedValue 屬性,而是通過從下拉列表中選擇值來設(shè)置單元格的 Value 屬性,。 所以我這樣實現(xiàn)的: 在DataGridView進行數(shù)據(jù)綁定時通過for來循環(huán)添加行(通過DataSource來實現(xiàn)的時候下的的功能無法完成),,同時 DataGridViewComboBoxColumn列中填充Null。 然后在DataGridView的RowsAdded事件中添加ComboBox的數(shù)據(jù)綁定代碼,。
1 private void dataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e)
2 { 3 4 DataGridViewComboBoxCell DgvCell = this.dataGridView1.Rows[e.RowIndex].Cells[1] as DataGridViewComboBoxCell; 5 DgvCell.DataSource = DataSource; 6 DgvCell.DisplayMember = "MeasureName"; 7 DgvCell.ValueMember = "MeasureId"; 8 } 這樣就可以完成數(shù)據(jù)綁定了,。我們就可以在DataGridVie一行的后面添加一個按鈕列,然后選擇DataGridView的CellClick事件中編寫代碼,。 我們可以通過
string selectValue =(string)(this.dataGridView1.Rows[e.RowIndex].Cells[1] as DataGridViewComboBoxCell).Value;//取得所選值的key即綁定ValueMember的值,。
MessageBox.Show("" + selectValue.ToString() + ""); 注意的地方就是如果綁定的的是泛型集合,那么DisplayMember與ValueMember的值必須是屬性(property) 不可以是類的字段(Filed),。 |
|