c# - 使用 C# 从代码隐藏生成下拉列表项

标签 c# asp.net dropdownbox

我正在尝试从后面的代码生成下拉列表,但出现此错误:

Object reference not set to an instance of an object.
Line 101:        ddlGroupName1.DataSource = cmd.ExecuteReader();

有人可以帮忙吗?这是我的 aspx 代码:

 <asp:DropDownList ID="ddlGroupName1" runat="server" OnSelectedIndexChanged="GroupNameChanged1"
                                        AutoPostBack="true" AppendDataBoundItems="true">
                                        <asp:ListItem Text="ALL" Value="ALL"></asp:ListItem>
                                        <asp:ListItem Text="Top 10" Value="10"></asp:ListItem>
                                    </asp:DropDownList>

下面是我的代码

 private void GetGroupNameList(DropDownList ddlGroupName1)
    {
        DataSet dataSet = new DataSet();
        String strConnString = System.Configuration.ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;
        SqlConnection con = new SqlConnection(strConnString);

        SqlCommand cmd = new SqlCommand("select distinct GroupName" +
                        " from MyTable");
        cmd.Connection = con;
        con.Open();
        SqlDataAdapter da = new SqlDataAdapter(cmd);
        da.Fill(dataSet);

        ddlGroupName1.DataSource = dataSet.Tables[0];

        ddlGroupName1.DataBind();
        con.Close();
        ddlGroupName1.Items.FindByValue(ViewState["MyFilter"].ToString())
                .Selected = true;
    }

最佳答案

ExecuteReader 返回一个需要您迭代每一行的数据读取器。你有几个选择。使用以下方法迭代数据读取器:

    SqlDataReader reader = cmd.ExecuteReader();
    while (reader.Read())
    {
        // Add your values to a List of entities or DataTable, then bind to that
    }

或者使用 SqlDataAdapter 将其直接转储到数据集/数据表中并绑定(bind)到它。

像这样:

DataSet dataSet = new DataSet();
String strConnString = System.Configuration.ConfigurationManager.ConnectionStrings["MyConnectionString"].ConnectionString;
using (SqlConnection con = new SqlConnection(strConnString))
{
   using (SqlCommand cmd = new SqlCommand("select distinct GroupName" +
                    " from MyTable"))
   {
       cmd.Connection = con;

       SqlDataAdapter da = new SqlDataAdapter(cmd);
       da.Fill(dataSet);

       ddlGroupName1.DataSource = dataSet.Tables[0];
       ddlGroupName1.DataBind();
   }
}

关于c# - 使用 C# 从代码隐藏生成下拉列表项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15709532/

相关文章:

c# - Entity Framework (实体类)序列化

Asp.net MVC 3 Ajax.beginform提交-发送什么

javascript - 提交下拉列表中的初始选择

Razor DropDownListFor 不传递模型

jquery - HTML 和 CSS 下拉框及其旁边的文本框

c# - 如何将 DataTable 转换为类对象?

c# - 如何使用 NewtonSoft Json.Net 将 Json 字典反序列化为平面类

c# - 无法使用 Npcap 而不是 Winpcap 激活适配器

javascript - 多个按钮调用相同的功能并执行不同的方法

c# - 从 asp.net 应用程序发送电子邮件