使用c#从代码生成下拉列表项

本文关键字:下拉列表 代码生成 使用 | 更新日期: 2023-09-27 18:06:36

我正试图从后面的代码生成下拉列表,但我得到这个错误:

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;
    }

使用c#从代码生成下拉列表项

ExecuteReader返回一个需要迭代每一行的数据读取器。你有几个选择。或者使用:

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

或者使用SqlDataAdapter将其直接转储到DataSet/DataTable中并绑定到该DataSet/DataTable。

一样:

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();
   }
}

我不认为您可以使用。datasource = sqldatareader()您需要将数据加载到datatable并执行。datasource = _dtDataTable。

Sqldatareader()是实时逐行读取。