Привязка выпадающего списка к набору данных

#c# #asp.net #code-behind #sqlconnection

#c# #asp.net #код за #sqlconnection

Вопрос:

Я заполняю таблицу данных из хранимой процедуры, а затем заполняю набор данных своей таблицей данных, но я получаю «Ссылка на объект не установлена для экземпляра объекта» в строке с 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();
    }
 

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

1. Либо таблица не добавляется должным образом, либо ddl имеет значение null. Можете ли вы установить точку останова var ddl = ... и перейти, чтобы увидеть сохраненное значение ddl ? Это поможет ответить на вопрос.

2. проверьте, содержит ли ds таблицу, содержащую строки, или нет. вы можете попробовать так: если (ds. Таблицы [0].количество строк> 0)

3. @kumarch1 невозможно ds иметь значение null, поскольку он создал его экземпляр new DataSet() . Возможно , что он пустой, но это не вызовет исключение NullReferenceException.

4. @kumarch1 опять же, (что касается вашего редактирования), это не привело бы к возникновению исключения, о котором спрашивает OP … оно просто не отображало бы строк в выпадающем списке… наиболее вероятной причиной этого ddl является значение null, поэтому попытка получить доступ к его DataSource свойству приведет к появлению a NullReferenceException .

5. ddl был нулевым, я узнал сейчас

Ответ №1:

Обычно я просто заполняю набор данных из адаптера. ds содержит коллекцию таблиц. В зависимости от того, сколько наборов результатов возвращает ваш сохраненный процесс, это будет отражено в таблицах коллекции [0], Таблицах [1] и т. Д… В вашем случае я предполагаю, что он возвращает только 1. При таком подходе вам не нужна добавленная переменная DataTable.

Кроме того, dispose и close являются своего рода избыточными, поскольку оператор using точно предназначен для обработки этого через IDisposable интерфейс.

 // example
da.Fill(ds);

if (ds.Tables.Count > 0)
{
    ddl.Datasource = ds.Tables[0];
    // etc....
}