我有一个包含Users表的数据库,我在DataGridView中显示数据。我想删除4列,但我的代码(从MSDN引用)似乎在末尾追加列。我怎样才能完全删除列?
所以这就是DGV在没有删除列的情况下的外观
我用来搜索和删除列的代码
RadarServerEntities rse = new RadarServerEntities();
gvUsers.DataSource = rse.Users;
gvUsers.Columns.Remove("ID");
gvUsers.Columns.Remove("InsertDate");
gvUsers.Columns.Remove("Connections");
gvUsers.Columns.Remove("MachineID");
结果
我想摆脱最后4列,那么为什么我的代码不做呢?
非常感谢:)
答案 0 :(得分:15)
我倾向于隐藏字段。
gvUsers.Columns["ID"].Visibility = false;
等等。
答案 1 :(得分:5)
你也可以使用gvUsers.Columns.RemoveAt(IndexOfColumn);
答案 2 :(得分:4)
如果您不想在绑定DataSource
时自动创建列,则需要设置gvUsers.AutoGenerateColumns = false;
RadarServerEntities rse = new RadarServerEntities();
gvUsers.AutoGenerateColumns = false;
gvUsers.DataSource = rse.Users;
答案 3 :(得分:1)
要真正删除自动生成的列,必须在数据绑定后关闭自动生成。
因此代码将是:
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可见的那一刻,丢失的列会重新生成。
因此,使用此解决方案,您将在绑定数据时生成列,然后将其关闭并删除不需要的列。丢失的列无法重新生成。
答案 4 :(得分:0)
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;
}
答案 5 :(得分:0)
我认为您必须先修改DataTable,然后再将其传递给DGV
如下:
RadarServerEntities rse = new RadarServerEntities();
rse.Users.Columns.Remove("ID");
rse.Users.Columns.Remove("InsertDate");
rse.Users.Columns.Remove("Connections");
rse.Users.Columns.Remove("MachineID");
dgvUsers.DataSource=rse.Users;
这种方法对我有用
答案 6 :(得分:-1)
如果您要从DataGridView
中删除的是您选择的列,那么此代码适合您。
将此代码放置在“删除”按钮中,即可删除所选的列。
int rowIndex = TuDataGrigView1.CurrentCell.RowIndex;
TuDataGrigView1.Rows.RemoveAt(rowIndex);