为什么DataGridColumn不会从DataGridView中删除

时间:2013-08-21 13:40:16

标签: c# winforms datagridview

我有自定义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();
    }

请找出错误并建议我解决方案。

3 个答案:

答案 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构造函数上工作。