我有自定义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();
}
请找出错误并建议我解决方案。
答案 0 :(得分:3)
我找到了这个问题的答案
我需要在Form Load上调用RefreshGrid()方法而不是Form 构造函数,在Form Log上调用它之后我的问题就解决了。但是我 不知道为什么它不在Form构造函数上工作。
我猜您尝试访问尚不存在的列。您正在使用DataGridView.AutoGenerateColumns
功能,即使设置了DataSource
属性,DatagridView
也不会创建列,直到显示网格。这就是为什么它不能在表单构造函数中工作,但在form_Load
事件中工作或之后显示网格。
使用form_Load
可能是一种可能的解决方法,但我重新命令您使用专门用于处理此情况的DataGridView.DataBindingComplete
事件。
答案 1 :(得分:0)
您应该只检索要在DataGridView中显示的数据表中的列。
var results = _table
.AsEnumerable()
.Where("Add your condition")
.Select("your columns names");
this.DataSource = results;
所以现在您不需要从DataGridView中删除任何列
答案 2 :(得分:0)
我找到了这个问题的答案
我需要在Form Load的Form Load上调用RefreshGrid()方法,在Form Load上调用它之后我的问题就解决了。但我不知道为什么它不能在Form构造函数上工作。