将下拉列表绑定到数据集

本文关键字:数据集 绑定 下拉列表 | 更新日期: 2023-09-27 18:10:09

我正在从存储过程中填充一个数据表,然后用我的数据表填充一个数据集,但我得到"对象引用不设置为对象的实例"在行与ddl。DataSource = ds.

如何解决绑定问题?

using (var scTyche = new SqlConnection(ConfigurationManager.ConnectionStrings["KondorConnectionConnectionString"].ConnectionString))
    {
        var ddl = (DropDownList)GridView1.FindControl("DropDownListFolders1");
        var da = new SqlDataAdapter();
        var dt = new DataTable();
        var ds = new DataSet();
        scTyche.Open();
        var cmdTyche = scTyche.CreateCommand();
        cmdTyche.CommandType = CommandType.StoredProcedure;
        cmdTyche.CommandText = "dbo.spGetFolders";
        cmdTyche.CommandTimeout = 60;
        cmdTyche.Parameters.Add("@nBranchId", SqlDbType.Int).Value = intBranchId;
        da.SelectCommand = cmdTyche;
        da.Fill(dt);
        ds.Tables.Add(dt);
        ddl.DataSource = ds;
        ddl.DataTextField = "strShort";
        ddl.DataValueField = "nId";
        ddl.DataBind();
        cmdTyche.Parameters.Clear();
        scTyche.Dispose();
        scTyche.Close();
    }

将下拉列表绑定到数据集

我通常只从适配器填充数据集。ds包含一个表集合。根据您的存储过程返回多少结果集,这将反映在集合表[0],表[1]等…在你的例子中,我假设它只返回1。使用这种方法,您不需要添加DataTable变量。

同样,dispose和close是多余的,因为using语句正是为了通过IDisposable接口处理这个问题而设计的。

// example
da.Fill(ds);
if (ds.Tables.Count > 0)
{
    ddl.Datasource = ds.Tables[0];
    // etc....
}