2013-09-27 83 views
6

我一直在爲這個問題苦苦掙扎太久,我看到了這個主題的所有答案,雖然我發現有幾個都沒有爲我工作。所以我的問題的基礎如下:我有一個DataGridView,將添加一行本身,一旦另一個DataGridView單元格被雙擊。當這個DataGridView獲得添加的行時,它爲自己添加了2種類型的列,其中一個是ComboBox,其中已經設置了一個集合(剛剛到達數據網格中的ComboBox選項並填充其集合)以及複選框列,現在他們都沒有做任何事,一旦我點擊它們,doble clic,多點擊你想要的許多clics,但沒有任何反應。我甚至嘗試了下面的代碼。DataGridview裏面的組合框下拉

public static void combolist(DataGridView combogrid)    
{ 

    var column = new DataGridViewComboBoxColumn(); 

    DataTable data = new DataTable(); 

    data.Columns.Add(new DataColumn("Value", typeof(string))); 
    data.Columns.Add(new DataColumn("Description", typeof(string))); 

    data.Rows.Add("item1"); 
    data.Rows.Add("item2"); 
    data.Rows.Add("item3"); 

    column.DataSource = data; 
    column.ValueMember = "Value"; 
    column.DisplayMember = "Description"; 

    combogrid.Columns.Add(column); 
} 

,即使我可以在類型ComboBox的新列添加到我的DataGridView它仍然是空的(或apears是因爲我不能CLIC看到一個下拉列表)。我的數據DataGridView gridview屬性設置爲:

editMode:editOnEnter,readOnly:false。

有沒有什麼我在這裏失蹤?爲什麼我不能填充或顯示這個ComboBox ?,這個問題讓我瘋狂,我相信這是找到答案的最佳網站。我會非常讚賞它...很多。

行,所以我肯定需要從另一個角度看這個問題,香港專業教育學院甚至tryed的ComboBox綁定到數據源,仍然犯規顯示任何東西!即使綁定到一個正常的ComboBox同一數據源得到期望的結果

DataGridViewComboBoxCell ComboColumn = (DataGridViewComboBoxCell)(combogrid.Rows[0].Cells[2]); 

ComboColumn.DataSource = class.details.GetData(); 
ComboColumn.DisplayMember = "name"; 

有沒有在ComboBoxDataGridView內工作時丟失一些基本步驟?

+0

我不認爲在給定的信息錯了,我不知道的東西特別的你應該考慮,因爲'DataGridViewComboBoxCell'幾乎是一樣的通常'ComboBox'。也許你可以發佈整個代碼來添加行/列以及與此操作相關的'DataGridView'的其他內容? – Onsokumaru

+0

thx虐待嘗試,並做到這一點 – user2793090

回答

3

的幾點思考:

  1. 我測試你的代碼發佈的Visual Studio 2012,並通過點擊一個Button有一個空DataGridView執行代碼。它適用於我,因爲我得到了一個DataGridComboBoxColumnComboBox三個空條目。我延長了代碼的下方,有三個命名條目:

    data.Columns.Add(new DataColumn("Value", typeof(string))); 
        data.Columns.Add(new DataColumn("Description", typeof(string))); 
    
        data.Rows.Add("item1"); 
        data.Rows[data.Rows.Count - 1].SetField("Value", "value1"); 
        data.Rows[data.Rows.Count - 1].SetField("Description", "description1"); 
        data.Rows.Add("item2"); 
        data.Rows[data.Rows.Count - 1].SetField("Value", "value2"); 
        data.Rows[data.Rows.Count - 1].SetField("Description", "description2"); 
        data.Rows.Add("item3"); 
        data.Rows[data.Rows.Count - 1].SetField("Value", "value3"); 
        data.Rows[data.Rows.Count - 1].SetField("Description", "description3"); 
    
        column.DataSource = data; 
    

    看來你的代碼只是增加了一個名爲行「項目1/2/3」或行,只是得到了第一列(「值」,這不是你的displayvalue)填充給定的值給沒有可顯示值的數據表。最後,我無法重現您無法打開下拉列表的問題(請注意,我使用了空的DataGridView,因爲我不知道您的DataGridView還有什麼)。

  2. 我不知道發佈的代碼是否正是您遇到問題時的代碼。但是你寫道,當你點擊一個單元格時,你添加一行到你的DataGridView,當這發生時,你添加兩列。你的意思是你爲每個添加的行添加兩列到網格,還是你的意思是該行由這兩列組成?
    如果最後一個是正確的,在我看來是與發佈的代碼類似的問題。您是否考慮添加DataGridViewComboBoxCellDataGridViewCheckboxCell來手動創建該行?我們有一個安靜的複雜的DataGridViewUserControl,我們動態添加不同的細胞類型,並沒有問題讓他們正確顯示。但是我們手動創建所有行,手動填充希望的單元格類型到行中,而不指定列的類型。

+0

我很抱歉,我似乎把你的困惑與你混爲一談。這是事情,datagrid2是一個空的數據網格,一旦datagrid1上的事件cellclick被觸發,將獲得一行添加到它的行,包含2列的行,列類型爲apear的行以正確的方式添加,但沒有在組合框列(column1),當點擊複選框按鈕column2時也沒有任何反應。我想最好的方法是添加所有列programaticaly,但我不太清楚爲什麼即時通訊有這個問題,thx爲你的回答哥們 – user2793090

1

這是因爲你的DataTable2 columns。但是您只添加第1列的單元格值,第2列的單元格(將用作comboBoxDisplayMember)具有空值。試試這個:

//..... 
data.Rows.Add("item1","This is Item1"); 
data.Rows.Add("item2","This is Item2"); 
data.Rows.Add("item3","This is Item3"); 
//..... 
+0

我apreciate你的答案,但即使改變這一點沒有差異,我認爲問題在事實組合似乎沒有響應任何事件我做的事件或任何事情,我不明白爲什麼這個會發生 – user2793090

+0

@ user2793090對不起,**我測試過它** –

+0

我的數據網格中必須有一些設置錯誤,然後是一些屬性,因爲我對這些變化進行了最大化處理,並且仍然得到相同的結果......任何想法? – user2793090

2

您正在將2列添加到數據表中,並且只填寫值成員。試試這個

 var column = new DataGridViewComboBoxColumn(); 

     DataTable data = new DataTable(); 

     data.Columns.Add(new DataColumn("Value", typeof(string))); 
     data.Columns.Add(new DataColumn("Description", typeof(string))); 

     data.Rows.Add("item1","123"); 
     data.Rows.Add("item2","234"); 
     data.Rows.Add("item3","245"); 

     column.DataSource = data; 
     column.ValueMember = "Value"; 
     column.DisplayMember = "Description"; 

     dataGridView1.Columns.Add(column); 
+0

thx爲你的答案,但即使這種修改,我仍然會得到相同的結果 – user2793090