在执行DropDownList时报这样的错:
DataBinder.Eval:“System.Char”不包含名称为 CHNDES 的属性。 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.Web.HttpException: DataBinder.Eval:“System.Char”不包含名称为 CHNDES 的属性。源错误: 执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪信息确定有关异常原因和发生位置的信息。  ============================================================================
代码如下:System.Data.OleDb.OleDbConnection SpConn=new System.Data.OleDb.OleDbConnection(Common.GetConnectionString());
System.Data.OleDb.OleDbDataAdapter SpDataAdp=new System.Data.OleDb.OleDbDataAdapter("SELECT MSGID,CHNDES FROM SYSMSGDICT WHERE PMSGID=1100 ORDER BY MSGID",SpConn);
System.Data.DataTable dtMsgDict=new System.Data.DataTable("SysMsgDict");SpDataAdp.Fill(dtMsgDict);
ddlObj.Items.Clear();
ddlObj.DataSource=dtMsgDict.DefaultView;
ddlObj.DataValueField="MSGID";
ddlObj.DataTextField="CHNDES";
ddlObj.DataBind();求教!

解决方案 »

  1.   

    SELECT MSGID,CHNDES FROM SYSMSGDICT WHERE PMSGID=1100 ORDER BY MSGID",SpConn);
    检查你的字段名称是否写错了?
      

  2.   

    System.Data.OleDb.OleDbConnection SpConn=new System.Data.OleDb.OleDbConnection(Common.GetConnectionString());
    System.Data.OleDb.OleDbDataAdapter SpDataAdp=new System.Data.OleDb.OleDbDataAdapter("SELECT MSGID,CHNDES FROM SYSMSGDICT WHERE PMSGID=1100 ORDER BY MSGID",SpConn);
    System.Data.DataTable dtMsgDict=new System.Data.DataTable("SysMsgDict");SpDataAdp.Fill(dtMsgDict);
    ddlObj.Items.Clear();foreach(DataRow dr in dtMsgDict.Rows)
    {
       ListItem item = new (dr["CHNDES"].ToString(),dr["MSGID"].ToString();
       ddlObj.Items.Add(item);
    }
      

  3.   

    字段名应该没错的,我在另外一个页面,相同的代码,只不过PMSGID不同,执行的时候很正常.我这段代码是写在DataGrid中的ItemDataBound事件中当e.ItemType为EditType情况下.
      

  4.   

    先看看SELECT MSGID,CHNDES FROM SYSMSGDICT WHERE PMSGID=1100 ORDER BY MSGID的結果是什麽東西
      

  5.   

    用sukaru(逍遥子)所说的方法也是没问题的,但不知直接DataBind()在别处不出错,而在此处出错???
    是从同一表中取数据,只不过PMSGID不同!.
      

  6.   

    OleDbCommand cmd= new OleDbCommand("SELECT MSGID,CHNDES FROM SYSMSGDICT WHERE PMSGID=1100 ORDER BY MSGID",SpConn);


    SqlDataReader dr=cmd.ExecuteReader(); while (dr.Read())
    {

    this.ddlObj.Items.Add(new ListItem(dr["MSGID"].ToString(),dr["CHNDES"].ToString()));


    }
      

  7.   

    原因不明,试试把ddlObj.Items.Clear();这句去掉看看.
      

  8.   


    我看别人也与我遇到相同的问题:
    http://forums.aspfree.com/archive/t-45815/Binding-DropDownList-to-DatabaseWhat-Happened但没看懂她是怎么解决的
      

  9.   

    这个是我用的,你看看
    public void ExeSqlDropDown(DropDownList DropDoList,string str_sql)
    {
    Conn.Conn Cn=new Conn.Conn();
    Cn.Connection_open();
    OleDbCommand myCom=new OleDbCommand(str_sql,Cn.accesscon);
    OleDbDataReader myRer=myCom.ExecuteReader();
    DropDoList.Items.Clear();
    while(myRer.Read())
    {
    DropDoList.Items.Add(new ListItem(myRer.GetString(0),myRer.GetString(0)));
    }
    myRer.Close();
    Cn.Connection_Close();
    }
      

  10.   

    我这里用循环添加也是没问题的!!
    其实我这一段代码是写在Common类中的一个函数:
    /// <summary>
    /// 根据提供的信息ID为指定的DropDownList绑定项目
    /// </summary>
    /// <param name="ddlObj"></param>
    /// <param name="parentid"></param>
    static public void FillMsgDict(System.Web.UI.WebControls.DropDownList ddlObj,int parentid)
    {
    System.Data.OleDb.OleDbConnection SpConn=new System.Data.OleDb.OleDbConnection(Common.GetConnectionString());
    System.Data.OleDb.OleDbDataAdapter SpDataAdp=new System.Data.OleDb.OleDbDataAdapter("SELECT * FROM SYSMSGDICT WHERE PMSGID="+parentid.ToString()+" ORDER BY MSGID",SpConn);
    System.Data.DataTable dtMsgDict=new System.Data.DataTable("SysMsgDict"); SpDataAdp.Fill(dtMsgDict);
    ddlObj.Items.Clear();
    ddlObj.DataSource=dtMsgDict.DefaultView;
    ddlObj.DataValueField="MSGID";
    ddlObj.DataTextField="CHNDES";
    ddlObj.DataBind();
    }我在其中一个页面这样调用没问题:
    //单位DropDownList
    DropDownList ddlTemp=(DropDownList)e.Item.Cells[6].FindControl("ddlUnit");
    Common.FillMsgDict(ddlTemp,1000);而在另一个页面调用就报上面的错误://LPK
    DropDownList ddlLpk=(DropDownList)e.Item.Cells[6].FindControl("ddlLpk");
    Common.FillMsgDict(ddlLpk,1100);
      

  11.   

    兄弟们,问题找到了,原因如下://单位DropDownList
    DropDownList ddlTemp=(DropDownList)e.Item.Cells[6].FindControl("ddlUnit");
    Common.FillMsgDict(ddlTemp,1000);而在另一个页面调用就报上面的错误://LPK
    DropDownList ddlLpk=(DropDownList)e.Item.Cells[6].FindControl("ddlLpk");
    Common.FillMsgDict(ddlLpk,1100);我在设计DataGrid时对模板列中的ddlLpk作了数据绑定,所以在ddlLpk执行DataBind()时,肯定是去DataGrid的DataSource中去找CHNDES列去了,而不是在我为ddlLpk指定的DataSource中去绑定.
    去除绑定后,问题解决了,谢谢位,结贴了