Привязка данных дает «System.Data.DataRowView» вместо фактических значений - PullRequest
0 голосов
/ 16 апреля 2010

Это мой код:

        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();

И так это выглядит: альтернативный текст http://i40.tinypic.com/8vsrd1.jpg

Как вы видите, GridView отлично показывает набор данных, а ListBox дает сбой. Что случилось? Как я могу это исправить?

Ответы [ 2 ]

3 голосов
/ 16 апреля 2010

Если вы не сообщаете своему элементу управления, какие конкретные свойства вы хотите использовать для отображения, он просто вызывает ToString() для элементов, к которым привязан, и использует их для отображения. Что для большинства объектов, ToString() по умолчанию просто возвращает имя типа.

Попробуйте установить MailsListBox.DataTextField и MailsListBox.DataValueField на "email".

2 голосов
/ 16 апреля 2010

Когда вы делаете MailsListBox.DataSource = ds;, вы на самом деле не устанавливаете набор данных как источник данных, а скорее как DataView по умолчанию. Сетка знает, как с этим справиться.

В обоих случаях, Grid и Listbox, вы также должны установить DataMember. Используйте что-то вроде:

MyAdapter.Fill(ds, "Foo");

MailsListBox.DataSource = ds;
MailSlistBox.DataMember = "Foo"; 
MailsListBox.DisplayMember = "email";
MailsListBox.DataBind();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...