列ヘッダのクリックでソートを実行する場合、ヘッダによるセルの選択操作の有効/無効によって操作が異なります。
ヘッダによるセル選択が有効な場合
ColumnHeaderCell.SortModeプロパティにAutomaticを設定し、ColumnHeaderCell.SelectionModeプロパティ(
HeaderCell.SelectionModeプロパティ)にContainedCells、IntersectedCellsまたはAllRowsのいずれかを設定すると、列ヘッダのソートインジケータをクリックしたときにソートが実行されます。
ヘッダによるセル選択が無効な場合
ColumnHeaderCell.SortModeプロパティにAutomaticを設定し、ColumnHeaderCell.SelectionModeプロパティにNoneを設定すると、列ヘッダのどこをクリックしてもソートが実行されます。
次のサンプルコードでは、1列目は列ヘッダのどこをクリックしてもソートを行い、2列目は列ヘッダのソートインジケータをクリックしたときのみソートを行います。また、2列目の列ヘッダではソートインジケータ以外の部分をクリックすると列の選択を行います。
Imports GrapeCity.Win.MultiRow
Dim Template1 As Template = Template.CreateGridTemplate(2)
' 列ヘッダのソートインジケータをクリックしたときにソートを実行する
Dim ColumnHeaderCell1 As ColumnHeaderCell = DirectCast(Template1.ColumnHeaders(0).Cells(0), ColumnHeaderCell)
ColumnHeaderCell1.SelectionMode = MultiRowSelectionMode.ContainedCells
ColumnHeaderCell1.SortMode = SortMode.Automatic
' 列ヘッダのどこをクリックしてもソートを実行する
Dim ColumnHeaderCell2 As ColumnHeaderCell = DirectCast(Template1.ColumnHeaders(0).Cells(1), ColumnHeaderCell)
ColumnHeaderCell2.SelectionMode = MultiRowSelectionMode.None
ColumnHeaderCell2.SortMode = SortMode.Automatic
GcMultiRow1.Template = Template1
GcMultiRow1.AllowUserToAddRows = False
' サンプルデータの入力
GcMultiRow1.RowCount = 3
GcMultiRow1.SetValue(0, 0, 1)
GcMultiRow1.SetValue(1, 0, 3)
GcMultiRow1.SetValue(2, 0, 2)
GcMultiRow1.SetValue(0, 1, 1)
GcMultiRow1.SetValue(1, 1, 3)
GcMultiRow1.SetValue(2, 1, 2)
using GrapeCity.Win.MultiRow;
Template template1 = Template.CreateGridTemplate(2);
// 列ヘッダのソートインジケータをクリックしたときにソートを実行する
ColumnHeaderCell columnHeaderCell1 = (ColumnHeaderCell)template1.ColumnHeaders[0].Cells[0];
columnHeaderCell1.SelectionMode = MultiRowSelectionMode.ContainedCells;
columnHeaderCell1.SortMode = SortMode.Automatic;
// 列ヘッダのどこをクリックしてもソートを実行する
ColumnHeaderCell columnHeaderCell2 = (ColumnHeaderCell)template1.ColumnHeaders[0].Cells[1];
columnHeaderCell2.SelectionMode = MultiRowSelectionMode.None;
columnHeaderCell2.SortMode = SortMode.Automatic;
gcMultiRow1.Template = template1;
gcMultiRow1.AllowUserToAddRows = false;
// サンプルデータの入力
gcMultiRow1.RowCount = 3;
gcMultiRow1.SetValue(0, 0, 1);
gcMultiRow1.SetValue(1, 0, 3);
gcMultiRow1.SetValue(2, 0, 2);
gcMultiRow1.SetValue(0, 1, 1);
gcMultiRow1.SetValue(1, 1, 3);
gcMultiRow1.SetValue(2, 1, 2);
ソートの状態は列ヘッダ上に「並べ替えグリフ」で表示されます。並べ替えグリフの状態は、ColumnHeaderCell.SortGlyphDirectionプロパティで取得または設定できます。
ColumnHeaderCell.SortModeプロパティをAutomaticに設定しているとき、ソートの方法は昇順または降順で固定です。任意のソートを使用するには、ColumnHeaderCell.SortModeプロパティをProgrammaticに設定し、GcMultiRow.SortCompareイベントを使用します。
ドロップダウンリストによる並び替えを設定するには、
ColumnHeaderCell.DropDownListプロパティに
HeaderDropDownListクラスのインスタンスを設定します。このとき、並び替えのコマンドを有効にするためにコンストラクタの第三引数にTrueを設定します。
Imports GrapeCity.Win.MultiRow
Dim Template1 As Template = Template.Default
Dim ColumnHeaderCell1 As ColumnHeaderCell = DirectCast(Template1.ColumnHeaders(0).Cells(0), ColumnHeaderCell)
ColumnHeaderCell1.DropDownList = New HeaderDropDownList("textBoxCell1", False, True)
GcMultiRow1.Template = Template1
GcMultiRow1.AllowUserToAddRows = False
' サンプルデータの入力
GcMultiRow1.RowCount = 3
GcMultiRow1.Rows(0)("textBoxCell1").Value = 2
GcMultiRow1.Rows(1)("textBoxCell1").Value = 1
GcMultiRow1.Rows(2)("textBoxCell1").Value = 3
using GrapeCity.Win.MultiRow;
Template template1 = Template.Default;
ColumnHeaderCell columnHeaderCell1 = (ColumnHeaderCell)template1.ColumnHeaders[0].Cells[0];
columnHeaderCell1.DropDownList = new HeaderDropDownList("textBoxCell1", false, true);
gcMultiRow1.Template = template1;
gcMultiRow1.AllowUserToAddRows = false;
// サンプルデータの入力
gcMultiRow1.RowCount = 3;
gcMultiRow1.Rows[0]["textBoxCell1"].Value = 2;
gcMultiRow1.Rows[1]["textBoxCell1"].Value = 1;
gcMultiRow1.Rows[2]["textBoxCell1"].Value = 3;
ソート対象とする行の範囲は
HeaderDropDownList.StartRowプロパティおよび
HeaderDropDownList.EndRowプロパティで設定します。
ソート時に列ヘッダ型セルに表示するインジケータに任意の画像を表示できます。インジケータの画像は次の3つの状態に対してそれぞれ設定できます。
次のコードは、ソートが実行されたときのインジケータの画像を設定します。
Imports GrapeCity.Win.MultiRow
Dim Template1 As Template = Template.Default
Dim ColumnHeaderCell1 As ColumnHeaderCell = DirectCast(Template1.ColumnHeaders(0).Cells(0), ColumnHeaderCell)
ColumnHeaderCell1.SelectionMode = MultiRowSelectionMode.None
ColumnHeaderCell1.SortMode = SortMode.Automatic
ColumnHeaderCell1.Value = "(クリック)"
ColumnHeaderCell1.SortGlyphDefaultImage = New Bitmap("test1.bmp")
ColumnHeaderCell1.SortGlyphAscendingImage = New Bitmap("test2.bmp")
ColumnHeaderCell1.SortGlyphDescendingImage = New Bitmap("test3.bmp")
GcMultiRow1.Template = Template1
GcMultiRow1.AllowUserToAddRows = False
' サンプルデータの入力
GcMultiRow1.RowCount = 3
GcMultiRow1.Rows(0)("textBoxCell1").Value = 2
GcMultiRow1.Rows(1)("textBoxCell1").Value = 1
GcMultiRow1.Rows(2)("textBoxCell1").Value = 3
using GrapeCity.Win.MultiRow;
Template template1 = Template.Default;
ColumnHeaderCell columnHeaderCell1 = (ColumnHeaderCell)template1.ColumnHeaders[0].Cells[0];
columnHeaderCell1.SelectionMode = MultiRowSelectionMode.None;
columnHeaderCell1.SortMode = SortMode.Automatic;
columnHeaderCell1.Value = "(クリック)";
columnHeaderCell1.SortGlyphDefaultImage = new Bitmap("test1.bmp");
columnHeaderCell1.SortGlyphAscendingImage = new Bitmap("test2.bmp");
columnHeaderCell1.SortGlyphDescendingImage = new Bitmap("test3.bmp");
gcMultiRow1.Template = template1;
gcMultiRow1.AllowUserToAddRows = false;
// サンプルデータの入力
gcMultiRow1.RowCount = 3;
gcMultiRow1.Rows[0]["textBoxCell1"].Value = 2;
gcMultiRow1.Rows[1]["textBoxCell1"].Value = 1;
gcMultiRow1.Rows[2]["textBoxCell1"].Value = 3;