数据绑定提供“System.Data.DataRowView”而不是实际值

时间:2010-04-15 22:05:45

标签: c# asp.net data-binding

这是我的代码:

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

看起来如此: alt text http://i40.tinypic.com/8vsrd1.jpg

如您所见,GridView很好地显示了数据集,并且ListBox使其失败。 发生了什么?我该如何解决?

2 个答案:

答案 0 :(得分:3)

如果您没有告诉您的控件您想要用于显示的特定属性,则只需对其绑定的项目调用ToString(),并将其用于显示。对于大多数对象,默认情况下ToString()只返回类型名称。

尝试将MailsListBox.DataTextFieldMailsListBox.DataValueField设为"email"

答案 1 :(得分:2)

执行MailsListBox.DataSource = ds;时,实际上并没有将数据集设置为DataSource,而是默认的DataView。 Grid知道如何处理它。

在两种情况下,Grid和Listbox,您也应该设置DataMember。使用像:

这样的东西
MyAdapter.Fill(ds, "Foo");

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