列を非表示にするには?
対象製品
El Tabelle MultiRow 4.0J
詳細
El Tabelle MultiRow 4.0J では、列を非表示にする機能は提供されていません。ただし、次のいずれかの方法を使うことで、非表示に近い効果を実現したり、非表示が必要となるケースを軽減できる場合があります。
列幅を0にし、列ヘッダのリサイズを禁止する
列の非表示と同じ効果を得るには、列幅を0に設定し列ヘッダのリサイズを禁止します。この方法ではエンドユーザーが列幅を変更できないため、列幅を操作するためのダイアログを別途作成するなどの対応が必要になります。
[Visual Basic]
[C#]
行ヘッダを使用する
列幅を0にする方法は、行ヘッダの列に対しても応用できます。この方法は、入力領域の列幅の変更をエンドユーザーに許可したい場合や、非表示列を編集する必要がない場合に適しています。難点は、エンドユーザーは行ヘッダの値を編集できないこと、レイアウトの制約を受けることです。
[Visual Basic]
[C#]
行フッタを使用する
行フッタは、既定で非表示になっています。つまり、行フッタを使用すると表示・非表示の列を簡単に制御できます。フッタの動作はヘッダに似ているため、行ヘッダの場合と同じ制約を受けますが、行ヘッダを使用できない場合に検討できます。
[Visual Basic]
[C#]
テンプレートを切り替える
列が表示されたテンプレート、列が非表示のテンプレートをそれぞれ用意することは、MultiRow 4.0J の動作に適した解決策です。ただし、MultiRow 4.0J はテンプレートを読み込んだときに入力済みのデータを破棄します。これは、テンプレート間の整合性が保証されないためです。この現象を軽減するには、テンプレートを切り替える直前にセルの値をファイルや変数に退避し、テンプレートの切り替え後にセルに値を読み込みます。
なお、アクティブセルの位置やスクロール位置の保持についても考慮する必要があるため、テンプレートを切り替えるタイミングを慎重に検討する必要があります。
Tag プロパティを使用する
非表示列を扱う目的がエンドユーザーからデータを隠すことにある場合、各セルの Tag プロパティを使用することで解決できます。Tag プロパティは開発者のための機能で、エンドユーザーに表示されることはありません。
[Visual Basic]
[C#]
列幅を0にし、列ヘッダのリサイズを禁止する
列の非表示と同じ効果を得るには、列幅を0に設定し列ヘッダのリサイズを禁止します。この方法ではエンドユーザーが列幅を変更できないため、列幅を操作するためのダイアログを別途作成するなどの対応が必要になります。

[Visual Basic]
'1列目の幅を0にする
MultiRowSheet1.ColumnHeaders.SetColumnWidth(0, 0)
'列ヘッダの垂直方向のリサイズのみ許可する
MultiRowSheet1.ColumnHeaders.AllowResize = GrapeCity.Win.ElTabelle.DirectionMode.Vertical
'列幅が0の場合の分割線を非表示にする
MultiRowSheet1.ColumnHeaders.HideSplitLine = GrapeCity.Win.ElTabelle.DirectionMode.Horizontal
MultiRowSheet1.ColumnHeaders.SetColumnWidth(0, 0)
'列ヘッダの垂直方向のリサイズのみ許可する
MultiRowSheet1.ColumnHeaders.AllowResize = GrapeCity.Win.ElTabelle.DirectionMode.Vertical
'列幅が0の場合の分割線を非表示にする
MultiRowSheet1.ColumnHeaders.HideSplitLine = GrapeCity.Win.ElTabelle.DirectionMode.Horizontal
[C#]
//1列目の幅を0にする
multiRowSheet1.ColumnHeaders.SetColumnWidth(0, 0);
//列ヘッダの垂直方向のリサイズのみ許可する
multiRowSheet1.ColumnHeaders.AllowResize = GrapeCity.Win.ElTabelle.DirectionMode.Vertical;
//列幅が0の場合の分割線を非表示にする
multiRowSheet1.ColumnHeaders.HideSplitLine = GrapeCity.Win.ElTabelle.DirectionMode.Horizontal;
multiRowSheet1.ColumnHeaders.SetColumnWidth(0, 0);
//列ヘッダの垂直方向のリサイズのみ許可する
multiRowSheet1.ColumnHeaders.AllowResize = GrapeCity.Win.ElTabelle.DirectionMode.Vertical;
//列幅が0の場合の分割線を非表示にする
multiRowSheet1.ColumnHeaders.HideSplitLine = GrapeCity.Win.ElTabelle.DirectionMode.Horizontal;
行ヘッダを使用する
列幅を0にする方法は、行ヘッダの列に対しても応用できます。この方法は、入力領域の列幅の変更をエンドユーザーに許可したい場合や、非表示列を編集する必要がない場合に適しています。難点は、エンドユーザーは行ヘッダの値を編集できないこと、レイアウトの制約を受けることです。

[Visual Basic]
'行ヘッダの1列目1行目に文字列を設定する
MultiRowSheet1.RowHeaders.GetMHeaders(0)(0, 0).Caption = "Data"
'行ヘッダの垂直方向のリサイズのみ許可する
MultiRowSheet1.RowHeaders.AllowResize = GrapeCity.Win.ElTabelle.DirectionMode.Vertical
'行ヘッダの1列目の幅を0にする
MultiRowSheet1.RowHeaders.SetColumnWidth(0, 0)
'列幅が0の場合の分割線を非表示にする
MultiRowSheet1.RowHeaders.HideSplitLine = GrapeCity.Win.ElTabelle.DirectionMode.Horizontal
MultiRowSheet1.RowHeaders.GetMHeaders(0)(0, 0).Caption = "Data"
'行ヘッダの垂直方向のリサイズのみ許可する
MultiRowSheet1.RowHeaders.AllowResize = GrapeCity.Win.ElTabelle.DirectionMode.Vertical
'行ヘッダの1列目の幅を0にする
MultiRowSheet1.RowHeaders.SetColumnWidth(0, 0)
'列幅が0の場合の分割線を非表示にする
MultiRowSheet1.RowHeaders.HideSplitLine = GrapeCity.Win.ElTabelle.DirectionMode.Horizontal
[C#]
//行ヘッダの1列目1行目に文字列を設定する
multiRowSheet1.RowHeaders.GetMHeaders(0)[0, 0].Caption = "Data";
//行ヘッダの垂直方向のリサイズのみ許可する
multiRowSheet1.RowHeaders.AllowResize = GrapeCity.Win.ElTabelle.DirectionMode.Vertical;
//行ヘッダの1列目の幅を0にする
multiRowSheet1.RowHeaders.SetColumnWidth(0, 0);
//列幅が0の場合の分割線を非表示にする
multiRowSheet1.RowHeaders.HideSplitLine = GrapeCity.Win.ElTabelle.DirectionMode.Horizontal;
multiRowSheet1.RowHeaders.GetMHeaders(0)[0, 0].Caption = "Data";
//行ヘッダの垂直方向のリサイズのみ許可する
multiRowSheet1.RowHeaders.AllowResize = GrapeCity.Win.ElTabelle.DirectionMode.Vertical;
//行ヘッダの1列目の幅を0にする
multiRowSheet1.RowHeaders.SetColumnWidth(0, 0);
//列幅が0の場合の分割線を非表示にする
multiRowSheet1.RowHeaders.HideSplitLine = GrapeCity.Win.ElTabelle.DirectionMode.Horizontal;
行フッタを使用する
行フッタは、既定で非表示になっています。つまり、行フッタを使用すると表示・非表示の列を簡単に制御できます。フッタの動作はヘッダに似ているため、行ヘッダの場合と同じ制約を受けますが、行ヘッダを使用できない場合に検討できます。

[Visual Basic]
MultiRowSheet1.RowFooters.Visible = True
[C#]
multiRowSheet1.RowFooters.Visible = true;
テンプレートを切り替える
列が表示されたテンプレート、列が非表示のテンプレートをそれぞれ用意することは、MultiRow 4.0J の動作に適した解決策です。ただし、MultiRow 4.0J はテンプレートを読み込んだときに入力済みのデータを破棄します。これは、テンプレート間の整合性が保証されないためです。この現象を軽減するには、テンプレートを切り替える直前にセルの値をファイルや変数に退避し、テンプレートの切り替え後にセルに値を読み込みます。
なお、アクティブセルの位置やスクロール位置の保持についても考慮する必要があるため、テンプレートを切り替えるタイミングを慎重に検討する必要があります。

Tag プロパティを使用する
非表示列を扱う目的がエンドユーザーからデータを隠すことにある場合、各セルの Tag プロパティを使用することで解決できます。Tag プロパティは開発者のための機能で、エンドユーザーに表示されることはありません。

[Visual Basic]
MultiRowSheet1.MRows(0)(0, 0).Tag = "Test"
MultiRowSheet1.MRows(0)(0, 0).Text = "Hello"
MultiRowSheet1.MRows(0)(0, 0).Text = "Hello"
[C#]
multiRowSheet1.MRows[0][0, 0].Tag = "Test";
multiRowSheet1.MRows[0][0, 0].Text = "Hello";
multiRowSheet1.MRows[0][0, 0].Text = "Hello";
キーワード
HowTo
この文書は、以前は次のFAQ IDで公開されていました : 9500