• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 877
  • Last Modified:

Winform comboBox returns dataRowView

Hi,
I have a dataset bound to comboBox1  with records.
In a certain scenario I have to reload the dataset with some other data if combo2 is selected.

So When combo2 is selected I set the bindings off for the comboBox1 and reload a fresh dataset again.
In the selected change event I try to get the student_id when a name is selected. but it returns system.data.RowView


Its bound for the first time like this
this.combobox1.DataSource = _ds.Tables[0];
this.combobox1.DisplayMember = "Student_name";
this.combobox1.ValueMember = "student_id";
this.combobox1.SelectedIndex = -1;
this.combobox1.SelectedIndexChanged += new System.EventHandlerthis.combobox1_SelectedIndexChanged);
this.combobox1.SelectedIndex = 0;

Now when Combo2 is selected and combobox1 is clicked IN CLICK EVENT OF  of comboBox1

I set the bindings off and bind again in the above way to another dataset as It has to be done on fly (ie when combo2 is selected Combo1 has to load some other data)
 

In the selected change event I try to get the student_ID but it returns data.row.dataviewrow

 
        private void Combobo1_SelectedIndexChanged(object sender, EventArgs e)
        {

         if ( combobox1.SelectedIndex > 0 || combobox1.selectedindex !=-1)    
            {    

                 // this.txtStudentID.Text = combobox1.SelectedItem.ToString();
                MessageBox.Show(combobox1.SelectedItem.ToString());
0
dotnet0824
Asked:
dotnet0824
  • 2
  • 2
  • 2
  • +1
3 Solutions
 
mac-willCommented:
Because you are binding to a DataTable each selection is in fact a DataRow.

This is not a problem you can just get what you are looking for like this:



DataRow mRow = (DataRow)combobox1.SelectedItem;
this.txtStudentID.Text = (String)   mRow["student_ID"];


Hope this helps.

MAC
0
 
Anurag ThakurTechnical ManagerCommented:
can you please do the following and try
the reason is that before you supply the data source to databind you need to tell that from the data source which column will be the display member and which one will be the value member

this.combobox1.isplayMember = "Student_name";
this.combobox1.ValueMember = "student_id";
this.combobox1.DataSource = _ds.Tables[0];
0
 
dotnet0824Author Commented:
i have already done that in my posting above.
0
Free Tool: Subnet Calculator

The subnet calculator helps you design networks by taking an IP address and network mask and returning information such as network, broadcast address, and host range.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

 
dotnet0824Author Commented:
DataRow mRow = (DataRow)combobox1.SelectedItem;
this.txtStudentID.Text = (String)   mRow["student_ID"];

It says unable to cast DataRowView to DataRow
0
 
Snarf0001Commented:
Just use:

this.txtStudentID.Text = combobox1.SelectedValue.ToString();

Since you bound to a datatable, the selectedItem is actually the datarowview from the table.
But since you specified the ValueMember when binding, you can retrieve with .SelectedValue.
0
 
mac-willCommented:
Try:

DataRow mRow = ((DataRowView)combobox1.SelectedItem).Row;
this.txtStudentID.Text = (String)   mRow["student_ID"];


0
 
Anurag ThakurTechnical ManagerCommented:
if you are binding you combobox with DisplayMember and ValueMember properties then to reterieve the student id you can do this
comboBox1.SelectedValue.ToString ()

for fetching the text from the combobox (student name) you can use
comboBox1.SelectedText.ToString()

0
 
Snarf0001Commented:
ragi007, though agree on the .SelectedValue as i already posted above, .SelectedText is misleading, and returns any text that the user has highlighted.

.Text will return the actual displayed text of the selected item.
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Introducing Cloud Class® training courses

Tech changes fast. You can learn faster. That’s why we’re bringing professional training courses to Experts Exchange. With a subscription, you can access all the Cloud Class® courses to expand your education, prep for certifications, and get top-notch instructions.

  • 2
  • 2
  • 2
  • +1
Tackle projects and never again get stuck behind a technical roadblock.
Join Now