这是我的代码:
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使其失败。 发生了什么?我该如何解决?
答案 0 :(得分:3)
如果您没有告诉您的控件您想要用于显示的特定属性,则只需对其绑定的项目调用ToString()
,并将其用于显示。对于大多数对象,默认情况下ToString()
只返回类型名称。
尝试将MailsListBox.DataTextField
和MailsListBox.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();