Проблема с заполнением выпадающего списка gridview из dataset

#c# #dataset

#c# #набор данных

Вопрос:

Я использую приведенный ниже код:

 protected void grdViewCInfo_RowDataBound(object sender, GridViewRowEventArgs e)
{
    MySqlConnection objMycon1 = new MySqlConnection(strProvider);
    objMycon1.Open();
    MySqlCommand cmd1 = new MySqlCommand("select * from tblcountrynames",objMycon1); 
    MySqlDataAdapter da = new MySqlDataAdapter(cmd1);
    DataSet ds = new DataSet(); 
    da.Fill(ds);
    // DropDownList Control Object Created to bind the data dynamically with each 
    // nested DropDownlist control placed inside the template column of the GridView 
    // Control.
    DropDownList drdList;

    // foreach loop is used to loop through each row of GridView Control.

    foreach (GridViewRow grdRow in grdViewCInfo.Rows)
    {    
        // Nested DropDownList Control reference is passed to the DrdList object.
        // This will allow you access the properties of dropdownlist placed 
        // inside the GridView Template column. 
        drdList = (DropDownList)(grdViewCInfo.Rows[grdRow.RowIndex].FindControl("ddlCountry" ));  
        // DataBinding of nested DropDownList Control for each row of GridView Control.  
        drdList.DataSource = ds;   
        drdList.DataValueField = "ID"; 
        drdList.DataTextField = "Name";
        drdList.DataBind();
    }
}
  

Выдает ошибку в виде:

Ссылка на объект не установлена на экземпляр объекта.

В строке drdList.DataSource = ds;

Как мне это исправить???

Ответ №1:

Попробуйте указать СТОЛБЕЦ в следующей строке кода:

 drdList = (DropDownList)( grdViewCInfo.Rows[ grdRow.RowIndex ][ColumnIndex].FindControl( "ddlCountry" ));
  

Другой вариант — перебирать столбцы в другом foreach

Дополнительная информация на основе вашего комментария:

Похоже, вы новичок в ASP.NET вот почему я рекомендую следующее:

Используйте asp:TemplateColumn и поместите asp: выпадающий список в EditTemplate. Подключите выпадающий список к SqlDataSource (или любому другому источнику данных, который вы хотите использовать).

Привязка будет обработана за вас.

Я не могу развивать дальше, не видя вашего ASP.NET кодируем и узнаем больше о ваших требованиях.

Комментарии:

1. я включаю индекс столбца, поэтому ошибка исчезла, но выпадающий список отображается пустым при редактировании события

2. это не происходит внутри цикла, как я проследил

3. если это не происходило внутри цикла, как вы получили исключение NullReferenceException в drdList.DataSource = ds; ?

4. потому что в то время я не указывал столбец

5. тот факт, что он попал в эту строку кода, означает, что он входит в цикл, независимо от того, генерирует он исключение или нет, не имеет значения

Ответ №2:

Попробуйте это

 DropDownList ddl;
        int i = 0;
        foreach (GridViewRow grdrow in grdmenu.Rows)
        {
     ddl = (DropDownList)grdmenu.Rows[grdrow.RowIndex].FindControl("ddloffer");
     ddl.SelectedIndex = Convert.ToInt16(ds.Tables[0].Rows[i]["Offer"]);
     ddl = (DropDownList)grdmenu.Rows[grdrow.RowIndex].FindControl("ddloffers");
     ddl.SelectedIndex = Convert.ToInt16(ds.Tables[0].Rows[i]["OfferType"]);

            i  ;  
            ddl.DataBind();
        }