レイアウト
・縦スクロールバーを常に表示する場合。
1 2 3 |
GcMultiRow1.VerticalScrollBarMode = ScrollBarMode.Fixed; |
ヘッダー操作
・特定列のヘッダータイトルを変更する場合。
1 2 3 4 |
int cellIndex = 0; GcMultiRow1.ColumnHeaders[0].Cells[cellIndex].Value = "ヘッダータイトル"; |
セル操作
・選択行の特定セルの値を取得、変更する場合。
1 2 3 4 5 6 7 |
int cellIndex = 0; var value1 = GcMultiRow1.CurrentRow.Cells[cellIndex].Value?.ToString(); var value2 = GcMultiRow1.CurrentRow.Cells[cellIndex].Value; GcMultiRow1.CurrentRow.Cells[cellIndex].Value = "変更したい値"; |
・選択行の特定セルを選択状態にする場合。
1 2 3 4 |
int cellIndex = 0; GcMultiRow1.CurrentRow.Cells[cellIndex].Selected = true; |
・選択行の特定セルに入力された値を取得する場合。
1 2 3 4 |
int cellIndex = 0; var editedFormattedValue = GcMultiRow1.CurrentRow.Cells[cellIndex].EditedFormattedValue?.ToString(); |
・選択されているセルを取得する場合。
1 2 3 |
var currentCell = GcMultiRow1.CurrentCell; |
・選択されているセルのインデックスを取得する場合。
1 2 3 |
var currentCellIndex = GcMultiRow1.CurrentCell.CellIndex |
・特定セルの有効無効を切り替える場合。
1 2 3 4 5 6 7 8 9 10 |
int rowIndex = 0; int cellIndex = 0; //有効 GcMultiRow1.Rows[rowIndex].Cells[cellIndex].Enabled = true; //無効 GcMultiRow1.Rows[rowIndex].Cells[cellIndex].Enabled = false; |
・ComboBox型のセルを取得し、選択しているアイテムを変更する場合。
1 2 3 4 5 6 7 |
int rowIndex = 0; int cellIndex = 0; var comboBoxCell = (ComboBoxCell)GcMultiRow1.Rows[rowIndex].Cells[cellIndex]; comboBoxCell.Value = 1; |
・選択セルの選択状態表示をやめる。
1 2 3 |
GcMultiRow1.HideSelection = false; |
・複数のセル選択をさせない。
1 2 3 |
GcMultiRow1.MultiSelect = false |
・セルの選択状態を解除する。
1 2 3 |
GcMultiRow1.ClearSelection(); |
・特定のセルを選択状態にする。
1 2 3 4 5 |
int rowIndex = 0; int cellIndex = 0; GcMultiRow1.CurrentCell = GcMultiRow1.Rows[rowIndex].Cells[cellIndex]; |
行操作
・選択されている行を取得する場合。
1 2 3 |
var currentRow = GcMultiRow1.CurrentRow; |
・ユーザの編集状態を終わらせる。
Editモードが継続しているとCellValueChangedイベントがキックされない。
1 2 3 |
GcMultiRow1.EndEdit(); |
・ユーザの編集状態を終わらせずに、入力内容を確定する場合。
1 2 3 |
GcMultiRow1.CommitEdit(); |
・特定の行を取得する場合。
1 2 3 4 |
int rowIndex = 0; var row = GcMultiRow1.Rows[rowIndex]; |
・全行全列のセルを1つずつ処理する。
1 2 3 4 5 6 7 8 9 |
foreach (var row in GcMultiRow1.Rows) { foreach (var cell in row.Cells) { cell.Enabled = false; } } |
・全セル一括で読取専用にする、読取専用をやめる。
1 2 3 4 |
GcMultiRow1.ReadOnly = ture; GcMultiRow1.ReadOnly = false; |
・選択行の行数を取得する。
1 2 3 |
var rowIndex = GcMultiRow1.CurrentRow.Index; |
・全体の行数を取得する。
1 2 3 |
var cnt = GcMultiRow1.RowCount; |
・10行表示する。
1 2 3 |
GcMultiRow1.RowCount = 10; |
・全行の値を配列に変換する。
1 2 3 |
var rows = GcMultiRow1.Rows.ToArray(); |
・全行の値をListに変換する。
1 2 3 |
var rows = GcMultiRow1.Rows.ToList(); |
・チェックボックス列にチェックがある行を対象に、IDの配列を抽出する。
1 2 3 4 5 6 7 8 9 |
const int IdCellIndex = 0; const int CheckboxCellIndex = 1; var idArray = GcMultiRow1.Rows .Where(x1 => x1.Cells[CheckboxCellIndex].Enabled == true) .Where(x2 => (bool)x2.Cells[CheckboxCellIndex].Value == true) .Select(x3 => (long)x3.Cells[IdCellIndex].Value).ToArray(); |
・チェックボックス列にチェックがある行を対象に、IDの配列を抽出する。
BindしているListから抽出する場合。
1 2 3 4 5 6 7 |
GcMultiRow1.DataSource = new BindingSource(DataList, null); GcMultiRow1.EndEdit(); var idArray = DataList.Where(x => x.Checked).Select(x => x.Id).ToArray(); |
全行のチェックボックス列を無効にする。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
const int CheckboxCellIndex = 1; //foreach文の場合 foreach (var row in GcMultiRow1.Rows) { row[CheckboxCellIndex].Enabled = false; } //for文の場合 for (var row = 0; row < GcMultiRow1.Rows.Count; row++) { GcMultiRow1[row, CheckboxCellIndex].Enabled = false; } |
イベント
・セルがクリックされた際に処理したい場合は CellClickイベントを使う。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
GcMultiRow1.CellClick += GcMultiRow1_CellClick; private void GcMultiRow1_CellClick(object sender, CellEventArgs e) { try { if (e.RowIndex < 0 || e.CellIndex < 0) return; //クリック処理対象外のセルがクリックされた場合はスキップ if (GcMultiRow1[e.RowIndex, e.CellIndex].Enabled == false) return; //セルが無効の場合はスキップ //以降はボタンクリック時の処理 } catch (Exception ex) { //エラーログ出力 //エラーメッセージ表示 } } |
・セルにフォーカスが移った際に処理したい場合は CellEnterイベントを使う。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
private const int CellIndex_Code = 1; private const int CellIndex_Name = 2; GcMultiRow1.CellEnter += GcMultiRow1_CellEnter; private void GcMultiRow1_CellEnter(object sender, CellEventArgs e) { try { if ((ActiveControl != GcMultiRow1) || GcMultiRow1.ReadOnly || !GcMultiRow1.Enabled) return; //CellEnter対象外の場合はスキップ switch (e.CellIndex) { case CellIndex_Code: //以降は、Code列に関する処理 break; case CellIndex_Name: //以降は、Name列に関する処理 break; default: return; //対象外のセル } GcMultiRow1.BeginEdit(true); //セルを編集状態にする } catch (Exception ex) { //エラーログ出力 //エラーメッセージ表示 } } |
・ユーザがセルに1文字入力するごとに処理したい場合は CurrentCellDirtyStateChangedイベントを使う。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
private const int CellIndex_Code = 1; GcMultiRow1.CurrentCellDirtyStateChanged += GcMultiRow1_CurrentCellDirtyStateChanged; private void GcMultiRow1_CurrentCellDirtyStateChanged(object sender, EventArgs e) { try { if ((ActiveControl != GcMultiRow1) || GcMultiRow1.ReadOnly || !GcMultiRow1.Enabled) return; //CurrentCellDirtyStateChanged対象外の場合はスキップ GcMultiRow1.CommitEdit(); //セルの編集を確定する switch (e.CellIndex) { case CellIndex_Code: //以降は、Code列に関する処理 break; default: return; //対象外のセル } } catch (Exception ex) { //エラーログ出力 //エラーメッセージ表示 } } |
・ユーザがセルの値を変更したかどうかを残したい場合は CellValueChangedイベントを使う。
1 2 3 4 5 6 7 8 9 10 |
private bool Modified { get; set; } GcMultiRow1.CellValueChanged += GcMultiRow1_CellValueChanged; private void GcMultiRow1_CellValueChanged(object sender, CellEventArgs e) { Modified = true; //セルの値が変更された } |
・ユーザが選択していたセルから別セルもしくは別アイテムへフォーカスを移した際に処理したい場合は CellLeaveイベントを使う。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
private const int CellIndex_Code = 1; private const int CellIndex_Name = 2; GcMultiRow1.CellLeave += GcMultiRow1_CellLeave; private void GcMultiRow1_CellLeave(object sender, CellEventArgs e) { try { if ((ActiveControl != GcMultiRow1) || GcMultiRow1.ReadOnly || !GcMultiRow1.Enabled) return; //CellLeave対象外の場合はスキップ GcMultiRow1.EndEdit(); //セルの編集状態を終了する switch (e.CellIndex) { case CellIndex_Code: //以降は、Code列に関する処理 break; case CellIndex_Name: //以降は、Name列に関する処理 break; default: return; //対象外のセル } } catch (Exception ex) { //エラーログ出力 //エラーメッセージ表示 } } |
参考
NuGet Gallery GrapeCity.Win.MultiRow
GrapeCity MultiRow for Windows Forms 11.0J ヘルプ
GrapeCity PowerTools – MultiRow Overview Part 1: Introduction
GrapeCity PowerTools – MultiRow Overview Part 2: Templates
GrapeCity PowerTools – MultiRow Overview Part 3: Borders & Cells
コメント