将下拉列表绑定到数据集

时间:2014-06-24 15:28:36

标签: c# asp.net code-behind sqlconnection

我从存储过程中填充数据表,然后使用我的数据表填充数据集,但我得到的对象引用未设置为对象的实例"与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();
    }

1 个答案:

答案 0 :(得分:0)

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

此外,dispose和close是多余的,因为using语句正是为了通过IDisposable接口处理它而设计的。

// example
da.Fill(ds);

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