1

こんにちは、行の追加を開始するまで無効になっている空の DatagridView があります。どの情報をロードするかを制御し、そこにある列を変更する 2 つの選択可能なオプションを持つコンボ ボックスがあります。現在、コンボ ボックスの SelectionChanged イベントでは、次のようなものがあります。

if (defaultComboBox.SelectedIndex == 0)
   {
   if (extractionDataGrid.Columns.Contains(companyIDColumn))
      {
         extractionDataGrid.Columns.Remove(companyIDColumn);
         extractionDataGrid.Columns.Remove(companyNameColumn);
         extractionDataGrid.Columns.Remove(maintenanceColumn);
         extractionDataGrid.Columns.Remove(simColumn);
      }

      extractionDataGrid.Columns.Add(userNameColumn);
      extractionDataGrid.Columns.Add(departmentColumn);
      extractionDataGrid.Columns.Add(officePhoneColumn);
      extractionDataGrid.Columns.Add(officePhontExtColumn);
      extractionDataGrid.Columns.Add(otherPhoneColumn);
. [18 columns]
.
.
.

選択されたインデックス 1 の場合は逆です。ここにはかなりの数の列があり、新しい datagridview 列を初期化し、ヘッダー テキストを調整し、自動サイズ モードを調整し、コードの巨大なブロックを回避する方法を考えようとしていました。その他のさまざまなパラメーター。また、選択したインデックスを前後に切り替えると、実際には毎回異なる順序で列が追加されます。ここで設定した順序で追加する必要がありますか??

ありがとう。

4

1 に答える 1

1
  1. すべての 0 インデックス列をリストに追加します
  2. 1 つのインデックス列をすべて別のリストに追加します
  3. 作成した新しいメソッドに列のリストを渡します。このメソッドは、List を反復処理して、必要に応じて追加または削除します。
  4. add/remove メソッドに同期ロックを設定します。それはおそらく、

    抽出DataGrid.Columns.Remove(companyIDColumn);

つまり、グリッドが完全に更新される前に条件が満たされます。または、列の順序に依存しないように条件を変更し、すべての列が追加または削除された後にのみ設定される変数をチェックするようにします。

すなわち

switch (gridMode){
  case GridMode.Company:
   this.AddColumns(userColumnList);
   gridMode = GridMode.User;
   break;
  case GridMode.User:
   this.AddColumns(userColumnList);
   gridMode = GridMode.Company;
   break;
}

protected void AddColumns(List<Column> adds){
  extractDataGrid.Layout.Suspend();
  extractionDataGrid.Columns.Clear();
  foreach(Column c in adds){
   extractionDataGrid.Columns.Add(c); 
  }
extractDataGrid.Layout.Resume();
}

または、列を削除せずに、可能であれば表示をオフにします。

于 2012-05-16T05:20:05.670 に答える