为什么没有从DataGridView中删除DataGridColumn
本文关键字:删除 DataGridColumn DataGridView 为什么 | 更新日期: 2023-09-27 18:28:25
我有自定义的DataGridView
控件,在该控件中有RefreshGrid()
方法,它使用DataSource填充DataGridView
。现在,我正在字符串中从DataSource绑定后的DataGridView
中删除一些列,但无法删除这些列,这些列没有被删除,而是在DataGridView的末尾添加,当我再次调用RefreshGrid()
方法时,这些列将从DataGridView
中删除。这是方法RefreshGrid()
的代码
public void RefreshGrid()
{
DataTable _table = AccessConnectionManagers.GetDataTableBySQLQuery("select Colm1,Colm2,Colm3 from TableName");
//Data Source Binding with DataGridView
this.DataSource = _table;
if (!string.IsNullOrEmpty("Colm1"))
{
var _colmArray = GridRemoveColumnName.Split(new char[] { ',', ';' }, StringSplitOptions.RemoveEmptyEntries).Where(a => this.Columns.Contains(a)).Select(a => a).ToArray();
foreach (string colm in _colmArray)
{
//Remove column after Source Binding
this.Columns.Remove(colm);
}
}
}
调用RefreshGrid()
public Form1()
{
InitializeComponent();
myDataGridView1.RefreshGrid();
}
请找出错误并向我建议解决方案。
我找到了这个问题的答案
我需要在Form Load上调用RefreshGrid()方法,而不是在Form上构造函数,在Form Log上调用它之后,我的问题得到了解决。但是我不知道为什么它不适用于Form构造函数。
我猜您试图访问尚不存在的列。您使用的是DataGridView.AutoGenerateColumns
函数,即使设置了DataSource
属性,DatagridView
也不会创建列,直到显示网格为止。这就是为什么它不在表单构造函数中工作,而是在form_Load
事件中工作,或者在显示网格之后工作。
使用form_Load
可能是一种可行的解决方法,但我再次命令您使用DataGridView.DataBindingComplete
事件,它是专门为处理这种情况而设计的。
您应该只从数据表中检索要在DataGridView中显示的列。
var results = _table
.AsEnumerable()
.Where("Add your condition")
.Select("your columns names");
this.DataSource = results;
所以现在您不需要从DataGridView 中删除任何列
我找到了这个问题的答案
我需要在Form Load上调用RefreshGrid()方法,而不是在Form构造函数上,在Form Load调用它之后,我的问题就解决了。但我不知道为什么它不适用于Form构造函数。