2014-01-24 28 views
1

我有一個用C#編寫的WinForms應用程序,其中有一個DataGridView綁定到從SQL數據庫填充的DataSource。將DataGridView中的列轉換爲組合框

我的代碼如下 -

string sqlText = "SELECT columns FROM table;"; 
SqlCommand sqlCom = new SqlCommand(sqlText); 
DataTable table = new DataTable(); 
SqlConnection linkToDB = DatabaseConnection(); 
sqlCom.Connection = linkToDB; 
linkToDB.Open(); 
using (linkToDB) 
using (SqlDataAdapter adapter = new SqlDataAdapter(sqlCom)) 
{ 
    adapter.Fill(table); 
}  
dataMyGridView.DataSource = table; 

我已經在努力將DataGridViewComboBox添加到此如下 -

DataGridViewComboBoxColumn colBox = new DataGridViewComboBoxColumn(); 
colBox.DataSource = GetListOfValues(); 
dataMyGridView.Columns.Add(colbox); 

現在這個工作,但它具有ComboBox增加了一個全新的列,而不是將其中一個現有的列轉換爲ComboBox。

任何人都可以解釋我如何將dataMyGridView中的現有列轉換爲組合框?

GetListOfValues函數只是返回一個DataTable,其中包含ComboBox字段的所有可能值。它正確填充,但正如我所說,它是一個全新的專欄。如何將添加的組合框引用到「表」中的相關屬性。

+0

不確定這是否會真正起作用,但是您可以嘗試在設計模式下添加兩列(TextBox和ComboBox),並在執行代碼時刪除不需要的數據,一旦綁定了數據。 –

+0

嗨你究竟想要什麼..喜歡在性別的情況下,你想要一個與男性和女性選項的下拉列表,當你從表格顯示到網格,在網格中你想要組合框不是文本值。 –

回答

2

我回答了類似的question今天

一旦創建了一列,你不能改變它的類型。你可以通過兩種方式實現你的目標。

1.創建所需列,將其添加到網格並綁定數據。如果您設置了列的DataPropertyName屬性,那麼當數據綁定時,數據列將綁定到您的網格列。 DataGridView將自動生成其他列。將第二個數據源綁定到組合框本身。

2.修改您的數據庫,使列表由數據庫提供,綁定將自動創建組合列。

0

嗨我有這樣的帖子,請檢查出來..它完美的示例代碼。

MyTacTics.Blogspot.comenter image description here

+0

感謝您的文章,但我使用您的方法出現錯誤。請看看http://stackoverflow.com/questions/36646686/set-datagridviewcombobox-default-equal-to-existing-datagridview-column – Zeus

1

是的,這是事實,一旦你的DataGridView填充,一個不能改變列類型。 但是,您通過執行以下步驟來實現您的目標。 1.

   dataView.Columns["yourColoumn"].Visible = false; 
       DataGridViewComboBoxColumn cmbCol = new DataGridViewComboBoxColumn(); 
       cmbCol.HeaderText = "yourColumn"; 
       cmbCol.Name = "myComboColumn"; 
       cmbCol.Items.Add("True"); 
       cmbCol.DataSource = myList(); 
       dataView.Columns.Add(cmbCol); 
       dataView.Columns["myComboColumn"].DisplayIndex = "at any index that you want"; 

       foreach (DataGridViewRow row in dataView.Rows) 
       { 
        row.Cells["myComboColumn"].Value = row.Cells["yourColumn"].Value; 
       } 

。 2.現在你只需要做一件事,再舉一個事件。

private void dataView_CellValueChanged(object sender, DataGridViewCellEventArgs e) 
      { 
       try 
       { 
        dataView.Rows[e.RowIndex].Cells["yourColoumn"].Value = dataView.Rows[e.RowIndex].Cells[e.ColumnIndex].Value; 
       } 
       catch (Exception ex) 
       { 
       } 
      } 

實際上你我只是在組合框中創建了一個「yourColoumn」的副本。並在後端「yourColoumn」正在更新。