2011-05-18 72 views
2

我正在開發一個允許用戶操縱xml文件的GUI。我在通過xml元素的列整齊排列的datagridview中顯示xml文件。我允許用戶在我的項目中添加列作爲擴展。該列被添加到數據集表中,然後更新到我用來顯示xml文件的datagridveiew中。我已經包含了用戶添加組合框以選擇選項而不是不斷輸入它們的功能。對或錯。然而,這是問題所在。保存一個正常的列很容易。組合框列是一個痛苦。C#Datagridview:獲取組合框中的選定項目

我有一個「保存組合框」,讓它更新到XML和一個「保存」按鈕,以保存在用戶選擇的目的地。

我已經做了一些研究,看起來組合框類有這樣一個功能,可以訪問用戶輸入的組合框中的selecteditem。 我們有:

ComboBox box = new ComboBox(); 
    box.SelectedItem; 

我試圖將其應用到組合框列類,但它不具有這樣的功能。因此,我無法弄清楚如何直接獲得用戶所選項目的價值。我也嘗試過用comboboxcell做實驗,但是這並沒有引導我到任何地方。我玩過的那些課程都沒有......「選擇項目」功能,甚至Google也沒有解決方案。 =(我也嘗試過使用cell.value,但由於某些原因它爲「null」,即使用戶在方框中選擇了一個項目,它也不會保存到單元格的值中。 : 我的問題簡而言之是,如果可能的話,您是否可以訪問組合框單元格的選定項目?此外,如何確保項目值保存在單元格中?

在此先感謝。 「M使用.NET 3.5 SP1,通過Visual Studio 2008 C#。

此致

tf.rz

+0

相關信息['如何獲得Datagridview Combobox選定項目的文本?'](http://stackoverflow.com/q/13418354/1577396) – 2012-11-22 04:32:30

回答

11

DataGridView中的控件不是一個ComboBox,它是一個DataGridViewComboBox並具有不同的屬性和方法。 From MSDN

與ComboBox控件不同,DataGridViewComboBoxCell沒有SelectedIndex和SelectedValue屬性。相反,從下拉列表中選擇一個值可以設置單元格的Value屬性。

但是,您提到Cell.Value對您而言爲空。那麼有可能是你按照下面的文章http://msdn.microsoft.com/en-us/library/ms404353(v=VS.90).aspx

必須設置DataGridViewComboBoxColumn.ValueMember或DataGridViewComboBoxCell.ValueMember屬性爲您的業務對象的屬性名失蹤的又一步驟。當用戶進行選擇時,業務對象的指示屬性將設置單元格的「值」屬性。

+0

你好,彼得謝謝你的回覆!我確實忘了設置一個值成員,但我不太明白業務對象是什麼。如何將valuemember設置爲屬性以某種方式設置單元格值?我嘗試模仿你發佈的文章,但單元格值仍然爲空,所以我認爲我很可能做錯了。 =( – 2011-05-18 21:29:40

+0

嘗試將ValueMember設置爲XML元素的名稱,例如「Name」。或者,也可以嘗試將DataPropertyName設置爲「Name」。 – 2011-05-18 21:54:45

0

.Net combox實際上是一個由文本框和下拉列表組成的複合控件。使用box.Text獲取當前顯示的信息。

編輯:行或單元格應該有一個.FindControl()方法。你需要做的是這樣:

Combobox box = (Combobox)(row.FindControl("[combobox ID]"));
string val = box.Text;

基本上,你發現它的容器(行或單元)內的控制,然後澆鑄發現作爲一個組合框控件,然後訪問它。文本屬性。

+0

感謝您的回答MAW!我希望我曾經想過類似的東西,但是當我訪問單元格時,儘管它是一個組合框,但它沒有.text功能! – 2011-05-18 21:25:46

+0

@ tf.rz - 見編輯。 – MAW74656 2011-05-19 14:04:13

2

如果我們結合一個datagridcomboboxcell具有不同DisplayMemberValueMember,像這樣:

dgcombocell.DisplayMember = "Name"; 
dgcombocell.ValueMember = "Id"; 
dgcombocell.DataSource = dataset1.Tables[0]; 

然後用於獲取SelectedTextSelectedValue,我們可以這樣寫代碼:

string SelectedText = Convert.ToString((DataGridView1.Rows[0].Cells["dgcombocell"] as DataGridViewComboBoxCell).FormattedValue.ToString()); 
int SelectedVal = Convert.ToInt32(DataGridView1.Rows[0].Cells["dgcombocell"].Value); 

我希望它能解決你的問題。

1

使用此獲取或設置所選值:

object selectedValue = currentRow.Cells["comboboxColumnName"].Value 

不要忘記設置DisplayMemberValueMember您DataGridViewComboBoxColumn

1

這是它是如何做

DataGridViewComboBoxCell comboCell = (DataGridViewComboBoxCell)dgv.Rows[0].Cells[1]; 

    MessageBox.Show(""+comboCell.Items.IndexOf(comboCell.Value)); 
0

我使用這個:

private int GetDataGridViewComboBoxCellSelectedIndex(DataGridViewCell d) 
{ 
    return ((DataGridViewComboBoxCell)d).Items.IndexOf(d.Value); 
} 
相關問題