#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. Но это даст вам меньше контроля над дизайном и макетом.