1

カスタムDataGridViewコントロールがあり、そのコントロールにはDataSource を使用しRefreshGrid()て塗りつぶすメソッドがあります。DataGridView今、私はDataGridViewDataSourceバインディングの後にそこからいくつかの列を削除しようとしていますが、それらを削除することはできません.それらの列は削除されませんが、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() メソッドを呼び出す必要があります。フォーム ログで呼び出した後、問題は解決します。しかし、フォームコンストラクターで機能しなかった理由がわかりません。

まだ存在しない列にアクセスしようとしていると思います。機能を使用しており、プロパティDataGridView.AutoGenerateColumnsを設定しても、グリッドが表示されるまで列は作成されません。フォームコンストラクターでは機能せず、イベントまたはグリッドが表示された後に機能するのはそのためです。DataSourceDatagridViewform_Load

を使用form_Loadすることで回避できる可能性がありますが、DataGridView.DataBindingCompleteこの状況を処理するために特別に設計されたイベントを使用することをお勧めします。

于 2013-08-26T11:33:27.650 に答える
0

この質問に対する答えを見つけました

フォーム コンストラクターではなくフォーム ロードで RefreshGrid() メソッドを呼び出す必要があります。フォーム ロードでそれを呼び出した後、私の問題は解決されます。しかし、フォームコンストラクターで機能しなかった理由がわかりません。

于 2013-08-26T09:17:03.020 に答える