1

我有自定义控件DataGridView,并且在该控件中有使用 DataSourceRefreshGrid()填充的方法。DataGridView现在我正在尝试DataGridView在 DataSource 绑定之后从中删除几列,但无法删除这些列,这些列没有被删除,而是在 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();
    }

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

4

3 回答 3

3

我找到了这个问题的答案

我需要在表单加载而不是表单构造函数上调用 RefreshGrid() 方法,在表单日志上调用它之后,我的问题得到解决。但我不知道为什么它不适用于 Form 构造函数。

我猜您尝试访问尚不存在的列。您正在使用该DataGridView.AutoGenerateColumns功能,即使您设置了DataSource属性,在DatagridView显示网格之前也不会创建列。这就是为什么它在表单构造函数中不起作用,但在form_Load事件或网格显示之后起作用。

使用form_Load可能是一种可能的解决方法,但我建议您使用DataGridView.DataBindingComplete专为处理这种情况而设计的事件。

于 2013-08-26T11:33:27.650 回答
0

我找到了这个问题的答案

我需要在表单加载而不是表单构造函数上调用 RefreshGrid() 方法,在表单加载上调用它之后,我的问题得到解决。但我不知道为什么它不适用于 Form 构造函数。

于 2013-08-26T09:17:03.020 回答
0

您应该只检索要在 DataGridView 中显示的数据表中的列。

var results = _table
    .AsEnumerable()
    .Where("Add your condition")
    .Select("your columns names");

this.DataSource = results;

所以现在你不需要从 DataGridView 中删除任何列

于 2013-08-21T13:46:38.223 回答