привязать gridview, когда столбец не существует

#c# #asp.net #gridview

#c# #asp.net #gridview

Вопрос:

Я пытаюсь привязать gridview из источника данных на основе SQL SELECT.

Однако иногда столбец не будет существовать в источнике данных, в зависимости от данных, возвращенных из инструкции. Мне нужен только один gridview.

Как бы мне обработать привязку таким образом, чтобы ошибка не была вызвана GridView1.DataBind() ?

Ответ №1:

Не совсем уверен, как вы это делаете, но вы можете проверять столбцы с помощью кода, похожего на это:

 DataTable dt = GetMyDataFromDatabase();
if (dt.Rows.Count > 0)
{
    if (!dt.Columns.Contains("MyColumn"))
    {
        //do whatever, maybe add the missing column?...
        dt.Columns.Add("MyColumn", typeof(String));
    }
}
 

Другим вариантом было бы не определять столбцы в ASPX и определить все это в коде после выключения RowDataBound и RowCreated событий.

Ответ №2:

Самый простой способ — убедиться, что столбцы всегда присутствуют в каждом результате запроса. Вы можете избежать ошибок, вставив фиктивные столбцы, если это необходимо.

Если, например, это ваш запрос по умолчанию

 SELECT columnA, columnB, columnC FROM yourDB
 

Вы можете вставить фиктивный столбец, подобный этому, если он отсутствует columnB

 SELECT columnA, NULL AS columnB, columnC FROM yourDB
 

Или если вам не хватает columnA, и это целое число, которое должно иметь значение

 SELECT 0 AS columnA, columnB, columnC FROM yourDB
 

Другой вариант — использовать ТОЛЬКО AutoGenerateColumns="true" в GridView. Но это даст вам меньше контроля над дизайном и макетом.