カスタムドロップダウンセルの作成

ReoGridは、カスタムセルタイプを作成する方法としてセルボディ機能を提供しています。ユーザーフレンドリーなカスタムドロップダウンセルを作成する機能を提供するDropdownCellという組み込みセルボディタイプがあります。組み込みセルタイプについて詳しくはこちらを参照してください。

カスタムドロップダウンセルを作成するには、unvell.ReoGrid.CellTypes名前空間に含まれるDropdownCellクラスを継承する独自のクラスを作成します。

ドロップダウンインターフェース

DropdownCellクラスは、ユーザーカスタマイズのドロップダウンセルを作成する最もシンプルな方法を提供します。セルの右側に矢印ボタンを表示し、ドロップダウンパネルの表示・非表示のユーザーアクションに応答します。

186

DropdownCellクラスを使用する場合、以下のことだけを行う必要があります。

  • ドロップダウンパネルにコントロールを設定する
  • コントロールから選択された項目をセルのデータとして設定する

DropdownCellは、ドロップダウンパネル内に表示されるコントロールを指定するためのDropdownControlというプロパティを提供しています。

ドロップダウンListViewの作成

この例では、標準の.NET ListViewコントロールを表示するドロップダウンセルの作成方法を示します。ListViewDropdownCellという名前のクラスを作成し、DropdownCellクラスを継承させます。

class ListViewDropdownCell : DropdownCell
{
  private ListView listView;

  public ListViewDropdownCell()
  {
    // Initial code goes here
  }
}

コンストラクタでListViewを初期化し、DropdownControlプロパティに割り当てます。

public ListViewDropdownCell()
{
  // initialize listview
  this.listView = new ListView()
  {
    BorderStyle = System.Windows.Forms.BorderStyle.None,
    View = View.Details,
    FullRowSelect = true,
  };

  // set listview as drop-down control
  this.DropdownControl = this.listView;
}

以下のコードを使用して、このListViewDropdownCellインスタンスをReoGridワークシートに追加します。

worksheet["B2"] = new ListViewDropdownCell();

注意: セルインスタンスのBodyプロパティを使用してセルボディオブジェクトを変更することもできます。Bodyプロパティをnullに設定すると、セルからセルボディが削除されます。 プログラムを実行してドロップダウンボタンをクリックすると、ListViewコントロールを含む空のパネルが表示されます。

187

リストビューに選択項目を表示するには、以下のコードでアイテムを追加します。

// add listview columns
this.listView.Columns.Add("Column 1", 120);
this.listView.Columns.Add("Column 2", 120);

// add groups and items
var group1 = listView.Groups.Add("grp1", "Group 1");
listView.Items.Add(new ListViewItem(new string[] { "Item 1.1", "Subitem 1.1" }) { Group = group1 });
listView.Items.Add(new ListViewItem(new string[] { "Item 1.2", "Subitem 1.2" }) { Group = group1 });
listView.Items.Add(new ListViewItem(new string[] { "Item 1.3", "Subitem 1.3" }) { Group = group1 });

var group2 = listView.Groups.Add("grp2", "Group 2");
listView.Items.Add(new ListViewItem(new string[] { "Item 2.1", "Subitem 2.1" }) { Group = group2 });
listView.Items.Add(new ListViewItem(new string[] { "Item 2.2", "Subitem 2.2" }) { Group = group2 });
listView.Items.Add(new ListViewItem(new string[] { "Item 2.3", "Subitem 2.3" }) { Group = group2 });

プログラムを再度実行します: 188

ご覧の通り、プレースホルダーアイテムを含むListViewコントロールが表示されますが、ドロップダウンパネルが狭すぎます。これを修正するには、DropdownCellインスタンスのMinimumDropdownWidthプロパティを設定します。

// enlarge the dropdown panel
this.MinimumDropdownWidth = 300;

189

選択項目の受け取り

リストビューのClickイベントをハンドルして選択項目を設定します。

// add click event handler
this.listView.Click += listView_Click;

Event handler:

void listView_Click(object sender, EventArgs e)
{
  if (this.listView.SelectedItems.Count > 0)
  {
    // set first selected item as cell's data
    this.Cell.Data = this.listView.SelectedItems[0].Text;

    this.PullUp();  // pull up the drop-down panel to finish editing
  }
}

プログラムを実行してドロップダウンリストからアイテムを選択すると、選択されたアイテムがセル内に表示されます。

190

最後に、ドロップダウンセルに罫線と初期テキストを設定します。

worksheet["B2"] = "Choose...";
worksheet["B2"] = new ListViewDropdownCell();
worksheet.Ranges["B2"].BorderOutline = BorderStyle.GraySolid;

最終結果

編集前: 192

アイテムの選択: 193

編集後: 194

完全なソースコードとデモは、ダウンロードページのリリースパッケージに含まれるデモプロジェクトで利用できます。

ドロップダウンセル内のスプレッドシート

エンドユーザーがサブスプレッドシートからコンテンツを選択できる機能を実装したい場合は、ドロップダウンパネル内に別のReoGridインスタンスを配置することも検討できます。


ページの内容は役に立ちましたか?