2011-09-16 98 views
5

我有一個DataGridView只讀模式設置爲true(不可編輯),它從表單加載數據庫中的值。當我將只讀模式設置爲false(可編輯模式)時,我想要一個特定的列(例如Department)作爲ComboBox顯示,這樣我就可以從那裏選擇值。當我進入只讀模式時,ComboBox應該消失,並且DataGridView應該正常顯示。如何實現它?我正在使用C#框架4.0,Winforms組合框在編輯模式的DatagridView

+0

你是什麼意思的'消失'?你想要隱藏整個列,或者只是要禁用組合框(即用戶無法從組合框中選擇下拉列表? – SwDevMan81

+0

我的意思是,datagridview處於其正常模式並且組合框是小圖標,但不是列 – Sandy

回答

4

請參閱ComboBox with read only behavior的實施。

您還可以根據DataGridView屬性的只讀屬性更改的時間更改DisplayStyle。將DisplayStyle設置爲DataGridViewComboBoxDisplayStyle.Nothing將隱藏下拉按鈕。

例如,改變ReadOnly屬性通過單擊按鈕會是這個樣子:

private void mChangeReadOnlyButton_Click(object sender, EventArgs e) 
{ 
    ComboBoxColumn2.DisplayStyle = (dataGridView1.ReadOnly) ? 
     DataGridViewComboBoxDisplayStyle.ComboBox : 
     DataGridViewComboBoxDisplayStyle.Nothing; 
    dataGridView1.ReadOnly = !dataGridView1.ReadOnly; 
} 

編輯:

Editable http://i51.tinypic.com/5e7o1w.jpg

只讀:

ReadOnly http://i52.tinypic.com/1zgaxyt.jpg

+0

我得到了我的解決方案其實,但真的很抱歉,我錯誤地刪除了它。我現在就放棄它了。爲麻煩抱歉。但在我的解決方案中,我面臨的問題是,當我的rowindex和columnindex是相同的。你的解決方案適合我。謝謝。 – Sandy

1

我得到了我的問題的解決方案,只是想到這裏發佈它。進入編輯模式時,運行以下代碼可能會解決問題。

public void bgCombo(DataGridView dg) 
{ 
    foreach (DataGridViewRow row in dg.Rows) 
    { 
     DataGridViewComboBoxCell dgc = new DataGridViewComboBoxCell(); 
     dgc.Value = row.Cells["Department"].Value; 
     row.Cells["Department"] = dgc; 
    } 
} 

在將dgc設置爲dataGridCell之前,我們可以在其中添加項目集合。希望能幫助到你。

問題:如果列和行索引在編輯時變得相同,則出現錯誤 - 操作無效,因爲它會導致對SetCurrentCellAddressCore函數的重入調用。

+0

我很喜歡這篇文章,我在網上發現的所有東西都是囉嗦和困惑,並不是我真正想要的東西。LIFE SAVER !! :) –

+0

我很高興能有這樣的評論:) – Sandy

1

如果你想隱藏選定行的下拉框,你可以使用DataGridViewComboBoxDisplayStyle財產

的選項組合框,DropdownBox或無

在這個例子 - 只要有一個值顯示在第4列組合框第2列

For Each row As DataGridViewRow In dgv.Rows 
     Dim Cell As DataGridViewComboBoxCell = CType(row.Cells(4), DataGridViewComboBoxCell) 
    Cell.ReadOnly = True 
    Cell.DisplayStyle = DataGridViewComboBoxDisplayStyle.Nothing 
    If row.Cells(2).Value IsNot Nothing Then 
     Cell.ReadOnly = False 
     Cell.DisplayStyle = DataGridViewComboBoxDisplayStyle.ComboBox 
    End If 
Next