后台数据库已经保存了列表值 
现在用dropdownlist 来显示后台保存的值 
aspx文件
 <asp:DropDownList ID="ddl_tyfs" runat="server" Height="16px" Width="79px" 
                        AutoPostBack="True" DataSourceID="SqlDataSource_tyfs" DataTextField="name" 
                        DataValueField="name" ondatabinding="Page_Load" ondatabound="Page_Load">
                    </asp:DropDownList>
cs文件
protected void Page_Load(object sender, EventArgs e)
    {
        string id = Request.Params["id"].ToString();
        DataSet ds_fhrxx = sqlhelper.GetDataSet("select id,shrbm,shrxm,shrdh,shrdz,ssfhrbm,ssfhrxm,sssdzbm,sszdzbm,sstyfs,ssthfs,sszyfs,ssqdcl,sshwlb from shrxx where id='" + id + "'");
        if (ds_fhrxx.Tables[0].Rows.Count > 0)
        {
              ddl_tyfs.Items.FindByText(ds_fhrxx.Tables[0].Rows[0]["sstyfs"].ToString()).Selected = true;
         }
出现“未将对象引用设置到对象的实例”错误

解决方案 »

  1.   

    没用过这样的数据绑定,不过看代码dropdownlist绑定的是数据源的name字段,和Page_Load中的sstyfs字段是否一致
    如果不一致,导致ddl_tyfs.Items.FindByText(ds_fhrxx.Tables[0].Rows[0]["sstyfs"].ToString()为空就会产生这这个错误了把异常的语句注释掉,查看dropdownlist的数据绑定情况,再去掉注释,调试查看
    ds_fhrxx.Tables[0].Rows[0]["sstyfs"].ToString()的值
      

  2.   

    估计是有空格吧
     ddl_tyfs.Items.FindByText(ds_fhrxx.Tables[0].Rows[0]["sstyfs"].ToString().Trim()).Selected = true;
      

  3.   

    看看你的数据库的sstyfs的字段是什么?
      

  4.   

    再问:sqlhelper是你自己写的一个数据操作的类吧?如果它工作没问题,那就是你标记红色的那段代码的问题了出现这个错误,就是没有找到字段,这种情况如果加了我上面写的Trim()也还是不能解决的话(一般解决不了,因为下拉框在绑定数据的时候数据已经存在空格了)
    你需要将数据库的字段改为varchar或者nvarchar
      

  5.   

      有的字段未null吧,,调试看看
      

  6.   

    DataSet ds_fhrxx = sqlhelper.GetDataSet("select id,shrbm,shrxm,shrdh,shrdz,ssfhrbm,ssfhrxm,sssdzbm,sszdzbm,sstyfs,ssthfs,sszyfs,ssqdcl,sshwlb from shrxx where id='" + id + "'");这句的所有字段都有值的 给文本框赋值也都可以 就是dropdownlist不行 
      

  7.   

    你看看你的那个sstyfs字段是啥类型啊~~~~~~~~~~~
      

  8.   

    if(ddl_tyfs.Items.FindByText(ds_fhrxx.Tables[0].Rows[0]["sstyfs"].ToString())!=null)
    {}
      

  9.   


    if(ddl_tyfs.Items.FindByText(ds_fhrxx.Tables[0].Rows[0]["sstyfs"].ToString())!=null)
    {
    ddl_tyfs.Items.FindByText(ds_fhrxx.Tables[0].Rows[0]["sstyfs"].ToString()).Selected = true;
    }
    这个有可能能选中,但是如果他的数据库字段有问题的话也不行,我见过一个类似的情况,数据库字段类型是char类型的,但是数据不足char的位数据库自动补充空格了,导致绑定失败
    所以我让LZ看数据库字段的类型,他就是不告诉我呵呵,郁闷
      

  10.   


    哈哈果然被我说中了,就是这个问题你改为varchar(10)或者nvarchar(10)看看,问题就能解决了
      

  11.   

    bm_tyfs表有两个方式
    id ,name
    1  , 汽运
    2  , 铁运
    现在把(2 ,铁运)保存到了 表shrxx 中的sstyfs 字段中现在要修改shrxx 表中的sstyfs字段的方式。点击修改的时候 把(2,铁运)这个显示到dropdownlist中,但是dropdownlist的列表中还是只有bm_tyfs中的两个方式而已 
      

  12.   

    数据库的没改 用这个
    if (ddl_tyfs.Items.FindByText(ds_fhrxx.Tables[0].Rows[0]["sstyfs"].ToString().Trim()) != null)
                 {                 ddl_tyfs.Items.FindByText(ds_fhrxx.Tables[0].Rows[0]["sstyfs"].ToString().Trim()).Selected = true;
                 }
                 
    就可以了但是把datasource 改为了
    <asp:DropDownList ID="ddl_tyfs" runat="server" Height="16px" Width="79px" 
                            AutoPostBack="True" DataSourceID="SqlDataSource_tyfs" DataTextField="sstyfs" 
                            DataValueField="sstyfs" 
    >
                        </asp:DropDownList>红色行标注的但是这样的话 他显示的是shrxx表的所有的sstyfs的值 不是我想要的结果(要的是bm_tyfs 中的两种方式而已)
      

  13.   

    现在我改用动态绑定数据源的方法
    DataSet ds_tyfs = sqlhelper.GetDataSet("select name from bm_tyfs ");
                 ddl_tyfs.DataSource = ds_tyfs.Tables[0].DefaultView;
                 ddl_tyfs.DataTextField = "name";
                 ddl_tyfs.DataValueField = "name";
                 ddl_tyfs.DataBind();在打开的页面可以看到bm_tyfs的两个方式(默认第一项值) 但是无法显示在shrxx中保存的值 (sstyfs字段)