【问题标题】:DataBinding Error: Drop Down List and DatabaseDataBinding 错误:下拉列表和数据库
【发布时间】:2013-01-17 11:00:45
【问题描述】:

我遇到了错误:

DataBinding:“System.Data.DataRowView”不包含属性 名称为“system_name”。

我有一个从 SYSTEMS 表中获取数据的下拉列表。代码:

string queryStringForSystem = "SELECT system_name FROM ptdd.systems where system_id=(select system_id from ptdd.parameters where parameter_id='" + txtParameterId.Text + "')";
string odbccon = "Driver={IBM DB2 ODBC DRIVER};database=dd_unify;hostname=x.x.x.x;protocol=TCPIP;port=50000;uid=xxxx;pwd=xxxx";            
using (System.Data.Odbc.OdbcConnection odbcConnection = new System.Data.Odbc.OdbcConnection(odbccon))
                {
                    System.Data.Odbc.OdbcDataAdapter adapter = new System.Data.Odbc.OdbcDataAdapter(queryStringForSrdRefId, odbccon);
                    System.Data.DataSet dataSet = new System.Data.DataSet();
                    try
                    {
                        odbcConnection.Open();
                        adapter.Fill(dataSet);
                        ddrSystem.DataSource = dataSet.Tables[0];
                        ddrSystem.DataTextField = "system_name";
                        ddrSystem.DataValueField = "system_id";
                        ddrSystem.DataBind();

                    }

                catch (Exception e1)
                {
                    Console.WriteLine(e1.Message);
                }

另外,我提到了 datatextfield 和 datavalue 字段。

<asp:DropDownList ID="ddrSystem" runat="server" DataTextField="system_name" DataValueField="system_id">
                </asp:DropDownList>

不过,这是一个小问题。无法解决。

【问题讨论】:

  • databind 上可能会抛出异常,因为您没有在选择列表中选择system_id,因此您的ddrSystem.DataValueField 将无效。
  • 这意味着您尝试与下拉列表绑定的数据集没有任何名为“system_name”的列。您需要确保该字段存在于您用于与下拉列表绑定的查询结果中(根据您的条件)。
  • @QuintonBernhardt 当我选择 system_name 作为 ValueField 时,它抛出了相同的异常
  • @Srinivas 我之前已经验证过了。列名与查询和数据文本/值字段中的列名匹配
  • 尝试将 ddrSystem.DataSource = dataSet.Tables[0] 替换为 ddrSystem.DataSource = dataSet

标签: c# asp.net data-binding drop-down-menu


【解决方案1】:

尝试更改查询

SELECT system_name FROM...

SELECT system_id, system_name FROM...

原因:您的代码正在寻找 system_id 但该字段不在查询中。

ddrSystem.DataTextField = "system_name";

ddrSystem.DataValueField = "system_id";

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多