Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/256.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将dropdownlist绑定到数据集_C#_Asp.net_Code Behind_Sqlconnection - Fatal编程技术网

C# 将dropdownlist绑定到数据集

C# 将dropdownlist绑定到数据集,c#,asp.net,code-behind,sqlconnection,C#,Asp.net,Code Behind,Sqlconnection,我从一个存储过程中填充一个数据表,然后用我的数据表填充一个数据集,但是我得到的对象引用没有设置为ddl.DataSource=ds行的对象实例 如何解决绑定问题 using (var scTyche = new SqlConnection(ConfigurationManager.ConnectionStrings["KondorConnectionConnectionString"].ConnectionString)) { var ddl = (DropDownLis

我从一个存储过程中填充一个数据表,然后用我的数据表填充一个数据集,但是我得到的对象引用没有设置为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....
}

表添加不正确,或者ddl为null。你能在var ddl=。。。然后跨过去查看ddl中的值?这将有助于回答问题。检查包含表的ds是否有行。您可以这样尝试:ifds.Tables[0].rows.count>0@kumarch1ds不可能为null,因为他已经用新的数据集实例化了它。它可能是空的,但不会引发NullReferenceException。@关于您的编辑,kumarch1同样不会引发OP询问的异常。。。它只会在下拉列表中不显示任何行。。。最有可能的原因是ddl为null,因此尝试访问它的DataSource属性会引发NullReferenceException