Forgive me if this is a rather simple question but I can't figure it out.
I have a frontend build in WPF.
It has a combobox with a datasource from a localDB.
The comboBox has a DisplayMember that gets filled at runtime.
I also have a text label and I want its text property to be whatever the displaymember is at runtime. The displaymember value is an object the user selects via the comboBox dropdown list, for example shoes.
comboBox.DataSource = ProductLogic.GetProduct();
comboBox.DisplayMember = "ProductName";
If I call it like this:
label.Text = comboBox.DisplayMember
It gets the value at code-time (which is "ProductName", but I need i the text value to be whatever it is at runtime. For example "Shoes". How would I go about this?
DisplayMember holds the name of the property which value is displayed in combobox (or any other control which supports it). So the value of DisplayMember is not changing. You probably want to use Text property.
label.Text = comboBox.Text
I have a ComboBox in my project which I have assigned a DisplayMember and a ValueMember. I want the ComboBox to display the relevant DisplayMember when a ValueMember value is given to the ComboBox.
Code examples will be appreciated.
Thank you
Just simple;
comboBox1.SelectedValue = "2"; // it will show you respected display member
I'm working on a GUI that allows the user to manipulate xml files. I display the xml file in a datagridview organized neatly by columns through xml elements. I allow the user to add columns as an extention on my project. The column gets added to the dataset table, then updated to the datagridveiew that I use to display the xml file in. I've included the ability for the user to add a combobox column to select choices instead of entering them in constantly like.. true or false. However, that is where the problem lies. Saving a normal column was easy. The combobox column is being a pain.
I have a "save combobox column" to have it updated to the xml and a "save" button to save in a destination of the user's choice.
I've done some research and it seems like the combobox class has such a feature to gain access to the selecteditem in the combobox put in by the user.
Where we have:
ComboBox box = new ComboBox();
box.SelectedItem;
I tried applying this to the combobox column class but it does not have such a function. Thus, I cannot figure out how to directly obtain the value of the user's selected item. I tried experimenting with comboboxcell's as well, but that didn't lead me anywhere either. Both those classes I played around with do not have a... "selected item" function and even google does not have a solution for me. =( I've also tried using the cell.value, but it is "null" for some reason. Even when the user selects an item in the box, it doesn't get saved into the cell's value.
TLDR:
My question in short is, how, if possible, do you gain access to the comboboxcolumn cell's selected item? Additionally, how would you then ensure that the item value is saved in the cell?
Thanks in advance. I'm using .NET 3.5 SP1, through Visual Studio 2008 C#.
Sincerely,
tf.rz
The Control in a DataGridView is not a ComboBox, it is a DataGridViewComboBox and has different properties and methods. From MSDN
Unlike the ComboBox control, the DataGridViewComboBoxCell does not have SelectedIndex and SelectedValue properties. Instead, selecting a value from a drop-down list sets the cell Value property.
However, you mentioned that the Cell.Value is null for you. Well there may be another step you are missing according to the following article (How to: Access Objects in a Windows Forms DataGridViewComboBoxCell Drop-Down List).
You must set the DataGridViewComboBoxColumn.ValueMember or DataGridViewComboBoxCell.ValueMember property to the name of a property on your business object. When the user makes a selection, the indicated property of the business object sets the cell Value property.
If we have bound a datagridcomboboxcell with a different DisplayMember and ValueMember, like so:
dgcombocell.DisplayMember = "Name";
dgcombocell.ValueMember = "Id";
dgcombocell.DataSource = dataset1.Tables[0];
Then for getting SelectedText, and SelectedValue, we can write this code:
string SelectedText = Convert.ToString((DataGridView1.Rows[0].Cells["dgcombocell"] as DataGridViewComboBoxCell).FormattedValue.ToString());
int SelectedVal = Convert.ToInt32(DataGridView1.Rows[0].Cells["dgcombocell"].Value);
I hope it solves your problem.
Use this to get or set selected value:
object selectedValue = currentRow.Cells["comboboxColumnName"].Value
Don't forget to set DisplayMember and ValueMember for your DataGridViewComboBoxColumn
This is how it is done
DataGridViewComboBoxCell comboCell = (DataGridViewComboBoxCell)dgv.Rows[0].Cells[1];
MessageBox.Show(""+comboCell.Items.IndexOf(comboCell.Value));
A .Net combox is actually a composite control made up of a textbox and a dropdownlist. Use box.Text to get the currently displayed information.
EDIT: The row or the cell should have a .FindControl() method. You'll need to do something like:
Combobox box = (Combobox)(row.FindControl("[combobox ID]"));
string val = box.Text;
Basically, you're finding the control within its container (row or cell), then casting the control found as a combobox, then accessing its .Text property.
I use this:
private int GetDataGridViewComboBoxCellSelectedIndex(DataGridViewCell d)
{
return ((DataGridViewComboBoxCell)d).Items.IndexOf(d.Value);
}
I've got a wpf listbox that is bound to a datatable. At some times, I want to programmaticly change the selection of the listbox. I know the text of the item I want to select. But it doesn't work to set the listbox1.SelectedItem to the text I want because the type of the SelectedItem is System.Data.DataRowView.
If I have the text I want to select and the DataRow that I want to select, what is the easiest way select the associated row in the list box?
Search through your DataSet and find the appropriate DataRow. Then set SelectedItem to that DataRow.
If you know the text, then it would be:
ListBox1.SelectedValue = ListBox1.Items.FindByText("Two").Value;
You can also use the SelectedIndex property to set the selected value by 0-based index.
The ListBox control (both in Forms and WebControls) has a SelectedValue property that:
"Gets the value of the selected item in the list control, or selects the item in the list control that contains the specified value."
You could use this to select the item based on it's value, typically a unique key.
More info from MSDN:
System.Windows.Forms.ListControl.SelectedValue
System.Web.UI.WebControls.ListControl.SelectedValue
I have set a list of items in a combobox, but when I debug the application, I have to select an item from the drop down to display an item by default. Is there a property? that you can set so that the combobox itemindex will always begin at 0 meaning the first item in the list at startup of the application?
this.comboBox1.SelectedIndex = 0;
You are gonna want to use the SelectedIndex attribute.
The SelectedItem property can only be read.
Using the SelectedText and SelectedValue Properties will change the Text and Value not which one is selected