iTayb
iTayb

Reputation: 12743

Databinding gives "System.Data.DataRowView" instead of actual values

This is my code:

        string SQL = "SELECT email FROM members WHERE subscribe=true";
        string myConnString = Application["ConnectionString"].ToString();

        OleDbConnection myConnection = new OleDbConnection(myConnString);
        OleDbCommand myCommand = new OleDbCommand(SQL, myConnection);
        myConnection.Open();
        OleDbDataAdapter MyAdapter = new OleDbDataAdapter(myCommand);
        DataSet ds = new DataSet();
        MyAdapter.Fill(ds);

        MailsListBox.DataSource = ds;
        MailsListBox.DataBind();

        GridView1.DataSource = ds;
        GridView1.DataBind();

        myConnection.Close();

And so it looks: alt text

As you see, the GridView shows the dataset just fine, and the ListBox fails it. What happened? How can I fix it?

Upvotes: 0

Views: 8172

Answers (2)

Henk Holterman
Henk Holterman

Reputation: 273179

When you do MailsListBox.DataSource = ds; you are not actually setting the Dataset as DataSource but rather the default DataView. The Grid knows how to deal with it.

In both cases, Grid and Listbox, you should set DataMember as well. Use someting like:

MyAdapter.Fill(ds, "Foo");

MailsListBox.DataSource = ds;
MailSlistBox.DataMember = "Foo"; 
MailsListBox.DisplayMember = "email";
MailsListBox.DataBind();

Upvotes: 2

womp
womp

Reputation: 116977

If you don't tell your control what specific properties you want to use for display, it just calls ToString() on the items it binds to, and uses that for display. Which for most objects, ToString() by default just returns the type name.

Try setting MailsListBox.DataTextField and MailsListBox.DataValueField to "email".

Upvotes: 3

Related Questions