2013-03-29 1 views
1

я пытаюсь создать раскрывающийся список из кода позади, но я получаю эту ошибку:список Генерирование выпадающих элементы из кода за использование C#

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

сообщение об ошибке говорит, что один из объектов ('' ddlGroupName1' или cmd') равна нулю. И поскольку вы используете 'cmd' раньше, я бы подумал, что' ddlGroupName1' не установлен, когда вы выполняете метод GetGroupNameList. – Jan

ответ

1

Я не думаю, что вы можете использовать .datasource = SqlDataReader() Вам нужно загрузить данные в datatable и сделать. datasource = _dtDataTable. sqldatareader() - в реальном времени по одной строке чтения.

5

ExecuteReader возвращает datareader, который требует от вас итерации каждой строки. У вас есть несколько вариантов. Либо итерируем DataReader с:

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

спасибо, но это не нравится Таблицы [0] – moe

+0

Извините! Это должно было быть 'dataSet.Tables [0]'. Просто обновил свой ответ. –

+0

все еще не работает на этой строке: ddlGroupName1.DataSource = dataSet.Tables [0] ;. Я обновил свой код за ваши предложения. см. выше. спасибо – moe

 Смежные вопросы

  • Нет связанных вопросов^_^