Я создаю веб-проект в Visual Studio 2012, используя С#, который извлекает данные из базы данных и показывает в виде сетки. В базе данных имеется много столбцов, которые отображаются в виде сетки как есть. Я хочу, чтобы пользователь мог исключить нежелательные столбцы, используя флажки, и после проверки, нажав кнопку, он должен обновиться.
Я нашел, как скрыть столбец по имени его столбца. Мне нужно выяснить, как я могу отобразить его с именем столбца.
if (CheckBox3.Checked)
{
dt.Columns.Remove("Site_name");
GridView1.DataSource = dt;
GridView1.DataBind();
}
else
{
dt.Columns.Show("Site_name"); //I want a code to display, using column name.
}
Ну, я нашел очень простой способ показать и скрыть конкретный столбец, используя check-box при нажатии кнопки.
if (CheckBox3.Checked == false)
{
dt.Columns.Remove("Site_name");
GridView1.DataSource = dt;
GridView1.DataBind();
}
Я бы не удалял весь столбец из DataTable
, тогда вы не сможете его вернуть, если пользователь хочет его показать (без переустановки всего из базы данных или чего-то еще). Я бы показал/скрыл только эту колонку.
Сначала вам нужно найти индекс столбца. DataControlFieldCollection.IndexOf
поддерживает только поиск индекса с помощью DataControlField
не с помощью HeaderText
. Если вам часто нужно найти индекс GridView
-column по его имени, вы можете использовать этот метод расширения:
public static class Extensions
{
public static int GetColumnIndex(this DataControlFieldCollection columns, string columnName, StringComparison comparison = StringComparison.CurrentCultureIgnoreCase)
{
for(int index = 0; index < columns.Count; index++)
if(columns[index].HeaderText.Equals(columnName, comparison))
return index;
return -1;
}
}
Теперь вы можете использовать этот код:
int colIndex = GridView1.Columns.IndexOf("Site_name");
GridView1.Columns[colIndex].Visible = isColumnVisible; // acc. to your logic
DataTable
. Вы можете использовать SELECT Col1, Site_name ...
или SELECT Col1 ...
соответствии с проверенным состоянием. Я подумал, что предпочтительнее было бы предоставить способ, который даже не должен снова загружать таблицу из базы данных.