2012-02-26 71 views
2

我目前有一個2列寬的DataGridView,第一列是DataGridViewTextBoxColumn,第二列是DataGridViewComboBoxColumn。我還有一個預先生成的通用List(字符串),它將用作DataGridViewComboBox的每行的DataSource。DataGridViewComboBox數據源

最後,我有一個循環,通過一系列串進行迭代,並且相應地分析它們,與提取的值被施加到使用相應的細胞中,如下所示:

dataGridView.Rows.Add("Column1Text", "Column2Text"); 

按預期在GridView數據被填充,以及DataGridViewComboBox正確顯示理想的項目。

問題是,單擊DataGridViewComboBox時,不會下拉任何項目。我已檢查DataGridViewComboBox包含項目。 DataGridViewTextBoxColumn的AutoSizeMode設置爲「填充」,如果它有任何相關性。

任何有關我可能做錯什麼的見解?點擊特定單元格時是否必須手動下拉項目?謝謝。

更新

我已經綁定的泛型列表作爲數據源方面嘗試了兩種不同的方法。

第一次是通過結合整列本身的DataSource:

col_key.DataSource = KeyList; 

的第二種方法是結合各新的DataGridViewComboBoxCell的DataSource相應行中:

(DataGridViewComboBoxCell)(row.Cells[1]).DataSource = KeyList; 

這兩種方法在運行時編譯並正確添加必要的項目,但單擊時沒有項目下拉。

+0

你能展示綁定嗎?不知何故,它感覺不對,要添加除DataGridViewRow以外的任何其他內容。Row – mindandmedia 2012-02-26 17:43:07

+0

當您選擇組合框列時,您可以添加網格屏幕截圖嗎? – 2012-02-26 17:48:36

+0

你能展示如何從預生成列表中填充ComboBox嗎?我不認爲我不熟悉這種技術。 – 2012-02-26 17:56:41

回答

0

爲了填補網格combocolumn,你應該把它作爲常規組合,數據源的組合應該有一個valuemember和displaymember,所以請檢查下面的例子:

//Coded by Amen Ayach's DataClassBuilder @26/02/2012 
using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 

public class iddesc{ 

    private int _id; 
    public int id{ 
     get { 
      return _id; 
     } 
     set { 
      _id = value; 
     } 
    } 

    private string _description; 
    public string description{ 
     get { 
      return _description; 
     } 
     set { 
      _description = value; 
     } 
    } 

} 

爲了填補電網:

private void FillData() 
    { 
     List<iddesc> DataList = new List<iddesc>(); 
     for (int i = 1; i < 11; i++) 
     { 
      DataList.Add(new iddesc() { id = i, description = "Desc" + i.ToString() }); 
     } 
     ComboCol.ValueMember = "id"; 
     ComboCol.DisplayMember = "description"; 
     ComboCol.DataSource = DataList; 

     for (int i = 0; i < 10; i++) 
     { 
      grd.Rows.Add(); 
      grd[ComboCol.Name, i].Value = DataList[i].id;//Here you deliver the valuemember 
      grd[Column1.Name, i].Value = DataList[i].description; 
     } 
    } 
+0

剛試過這個片段(在需要的地方更改名稱),我遇到了一些問題。內容加載,但是當我點擊Combobox時,沒有任何反應。它與標準的WinForms ComboBox一起工作也很好。 – user 2012-02-27 00:46:17

+0

@NateShoffner,我認爲它只是:'ComboCol.ReadOnly = false;' – 2012-02-27 06:20:05

+0

將ReadOnly屬性設置爲true或false似乎沒有任何區別。 – user 2012-02-27 07:43:15

1

我選擇在CellEnter事件來處理這個問題:

private void dataGridView1_CellEnter(object sender, DataGridViewCellEventArgs e) 
    { 
     if (e.ColumnIndex == 2) 
     { 
      DataGridViewComboBoxCell cell = this.dataGridView1.Rows[e.RowIndex].Cells[e.ColumnIndex] as DataGridViewComboBoxCell; 
      if (cell.DataSource == null) 
      { 
       cell.DataSource = this._ComboItemsBindingSource; 
       cell.DisplayMember = "Value"; //lite-weight wrapper on string 
       cell.ValueMember = "Value"; //where Value is a property 
      } 
     } 
    } 
0

我也有類似p roblem。我發現將DGV的EditMode屬性設置爲EditOnEnter(以前是EditProgrammatically)可以解決問題。這可以在設計者中完成。