Удалить столбец из DataGridView

У меня есть база данных с таблицей пользователей, и я представляю данные в DataGridView. Я хотел бы удалить 4 столбца, но код, на который я ссылаюсь (на MSDN), кажется, добавляет столбцы в конце. Как я могу полностью удалить столбцы?

Так вот как выглядит DGV без удаленных столбцов

Without Removal Code

код, который я использую, чтобы попытаться удалить столбцы

RadarServerEntities rse = new RadarServerEntities();
gvUsers.DataSource = rse.Users;

gvUsers.Columns.Remove("ID");
gvUsers.Columns.Remove("InsertDate");
gvUsers.Columns.Remove("Connections");
gvUsers.Columns.Remove("MachineID");

результат

With Removal Code

I хотел бы избавиться от последних 4 столбцов, так почему мой код этого не делает?

Большое Спасибо :)

5 ответов


Я, как правило, просто скрываю поля.

gvUsers.Columns["ID"].Visibility = false;

и так далее.


вы также можете использовать gvUsers.Columns.RemoveAt(IndexOfColumn);


Если вы не хотите создавать столбцы автоматически при привязке вашего DataSource, вам необходимо установить gvUsers.AutoGenerateColumns = false;

RadarServerEntities rse = new RadarServerEntities();
gvUsers.AutoGenerateColumns = false;
gvUsers.DataSource = rse.Users;

DataGridViewColumn DataGridViewColumnSelected;   
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
                    if (e.ColumnIndex !=-1 && e.RowIndex == -1)
                    {
                        DataGridViewColumnSelected = dataGridView1.Columns[e.ColumnIndex] as DataGridViewColumn;

                    }
}

protected override bool ProcessCmdKey(ref Message msg, Keys keyData)
        {
            bool bHandled = false;
            switch (keyData)
            {
                case Keys.Delete:
                    if (DataGridViewColumnSelected != null)
                    {
                        this.dataGridView1.Columns.RemoveAt(DataGridViewColumnSelected.Index);
                        //dataGridView1.Columns[DataGridViewColumnSelected.Name].Visible = false;  // case of just hiding the column
                    }
                    break;
            }
            return bHandled;
        }

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

таким образом, код будет:

RadarServerEntities rse = new RadarServerEntities();
gvUsers.DataSource = rse.Users;
gvUsers.AutoGenerateColumns = false;
gvUsers.Columns.Remove("ID");
gvUsers.Columns.Remove("InsertDate");
gvUsers.Columns.Remove("Connections");
gvUsers.Columns.Remove("MachineID");

Я не проверял, что именно произойдет, но, вероятно, момент, когда DGV становится видимым, отсутствующие столбцы повторно автоматически.

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