【问题标题】:Databinding gives "System.Data.DataRowView" instead of actual values数据绑定提供“System.Data.DataRowView”而不是实际值
【发布时间】:2010-04-15 22:05:45
【问题描述】:

这是我的代码:

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

所以看起来:

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

【问题讨论】:

    标签: c# asp.net data-binding


    【解决方案1】:

    如果你不告诉你的控件你想使用哪些特定的属性来显示,它只会在它绑定到的项目上调用ToString(),并将其用于显示。对于大多数对象,ToString() 默认只返回类型名称。

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

    【讨论】:

      【解决方案2】:

      当您执行MailsListBox.DataSource = ds; 时,您实际上并未将Dataset 设置为DataSource,而是设置为默认DataView。网格知道如何处理它。

      在这两种情况下,Grid 和 Listbox,您也应该设置 DataMember。使用类似的东西:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-01-15
        • 2013-03-03
        • 1970-01-01
        • 2014-06-11
        • 2019-10-14
        • 2021-06-05
        • 2023-04-08
        相关资源
        最近更新 更多