作成日: 2024/02/22 最終更新日: 2024/02/22
文書種別
使用方法
詳細
連結モードではセル型は基盤となるデータソースのフィールドの型によって決まりますが、非連結モードの場合は、FlexGridの行や列のセル型は基本的にはDataTypeプロパティにより決定されます。この設定を行うと、それに応じた組み込みエディタ(*1)が使用され、入力されたデータが各種のセル型で表示されます。
*1:組込みエディタ
文字列、数値、日付、チェックボックス、コンボボックス、マスク、セルボタン、画像等のエディタが用意されています。
なお、マスク型セルでは、DataTypeとともにEditMaskプロパティを設定します。コンボボックスやセルボタンなどのプルダウン系のセルには、DataTypeの代わりにComboListプロパティを使用します。数値型や日付型セルでは、Formatを設定して表示形式を指定できます。
これら以外にも、MS標準のコントロールや独自のクラス等をカスタムエディタとして使用して、例えばプルダウン、アップダウンボタン、トグルボタン等をセルに表示することも可能です。
本ナレッジでは、組込みエディタ・カスタムエディタを使った代表的なセル型の設定コードを紹介します。 ナレッジの最後にプロジェクトファイルを添付していますので、実際の動作をご確認ください。
【注記】
・VBプロジェクトには、独自クラスをカスタムエディタとして使用するコードは含まれていません。
・カスタムエディタに使用する独自クラス(NumericTextBox、FontPicker、FileNamePicker、ImagePicker、ColorPickerなどのクラス)は、本ナレッジのサンプルコードには含まれません。具体的な設定内容については添付プロジェクト(C#)をご参照ください。

◎サンプルコード(VB)
*1:組込みエディタ
文字列、数値、日付、チェックボックス、コンボボックス、マスク、セルボタン、画像等のエディタが用意されています。
なお、マスク型セルでは、DataTypeとともにEditMaskプロパティを設定します。コンボボックスやセルボタンなどのプルダウン系のセルには、DataTypeの代わりにComboListプロパティを使用します。数値型や日付型セルでは、Formatを設定して表示形式を指定できます。
これら以外にも、MS標準のコントロールや独自のクラス等をカスタムエディタとして使用して、例えばプルダウン、アップダウンボタン、トグルボタン等をセルに表示することも可能です。
本ナレッジでは、組込みエディタ・カスタムエディタを使った代表的なセル型の設定コードを紹介します。 ナレッジの最後にプロジェクトファイルを添付していますので、実際の動作をご確認ください。
【注記】
・VBプロジェクトには、独自クラスをカスタムエディタとして使用するコードは含まれていません。
・カスタムエディタに使用する独自クラス(NumericTextBox、FontPicker、FileNamePicker、ImagePicker、ColorPickerなどのクラス)は、本ナレッジのサンプルコードには含まれません。具体的な設定内容については添付プロジェクト(C#)をご参照ください。
◎サンプルコード(VB)
Imports C1.Win.C1FlexGrid
Public Class Form1
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' 列数、行数の指定
C1FlexGrid1.Cols.Fixed = 2
C1FlexGrid1.Rows.Count = 33
' 列幅の設定
C1FlexGrid1.Cols(0).Width = 30
C1FlexGrid1.Cols(1).Width = 200
C1FlexGrid1.Cols(2).Width = 150
' 固定列の番号
For i As Integer = 1 To C1FlexGrid1.Rows.Count - 1
C1FlexGrid1(i, 0) = i
Next
' ボタンを常時表示
C1FlexGrid1.ShowButtons = ShowButtonsEnum.Always
' ハイパーリンクの書式を設定するためにオーナー描画を使用
C1FlexGrid1.DrawMode = DrawModeEnum.OwnerDraw
' タイトルの設定
C1FlexGrid1(0, 1) = " (セル型)"
C1FlexGrid1(1, 1) = "テキストボックス型*"
C1FlexGrid1(2, 1) = "テキストボックス型(TextBox)"
C1FlexGrid1(3, 1) = "マスク型"
C1FlexGrid1(4, 1) = "数値型(整数)*"
C1FlexGrid1(5, 1) = "数値型(浮動小数)*"
C1FlexGrid1(6, 1) = "数値型(通貨)*"
C1FlexGrid1(7, 1) = "数値型(指数表記)*"
C1FlexGrid1(8, 1) = "数値型(パーセント)*"
C1FlexGrid1(9, 1) = "数値型(計算式:1+2等)"
C1FlexGrid1(10, 1) = "日付型*"
C1FlexGrid1(11, 1) = "時刻型*"
C1FlexGrid1(12, 1) = "チェックボックス型*"
C1FlexGrid1(13, 1) = "チェックボックス型(3値)"
C1FlexGrid1(14, 1) = "チェックボックス型(ブール型以外)"
C1FlexGrid1(15, 1) = "画像型*"
C1FlexGrid1(16, 1) = "画像型(SetCellImage)"
C1FlexGrid1(17, 1) = "リストボックス型(ComboList)*"
C1FlexGrid1(18, 1) = "コンボボックス型(ComboList)*"
C1FlexGrid1(19, 1) = "コンボボックス型(CombBox)"
C1FlexGrid1(20, 1) = "コンボボックス型(複数列)"
C1FlexGrid1(21, 1) = "コンボボックス型(画像+テキスト)"
C1FlexGrid1(22, 1) = "コマンドボタン型(Button)"
C1FlexGrid1(23, 1) = "セルボタン型*"
C1FlexGrid1(24, 1) = "セルボタン型(編集可)*"
C1FlexGrid1(25, 1) = "セルボタン型(フォント選択)"
C1FlexGrid1(26, 1) = "セルボタン型(ファイル選択)"
C1FlexGrid1(27, 1) = "セルボタン型(画像選択)"
C1FlexGrid1(28, 1) = "プルダウン型(色選択)"
C1FlexGrid1(29, 1) = "アップダウンボタン型(数値)"
C1FlexGrid1(30, 1) = "アップダウンボタン型(テキスト)"
C1FlexGrid1(31, 1) = "トグルボタン型(Yes/No)"
C1FlexGrid1(32, 1) = "ハイパーリンク型"
' テキストボックス型*
C1FlexGrid1.Rows(1).DataType = GetType(String)
C1FlexGrid1(1, 2) = "abcdefgh"
' テキストボックス型(TextBox):エディタとして明示的にTextBoxを使用
C1FlexGrid1.Rows(2).Editor = textBox1
C1FlexGrid1(2, 2) = "ABCDEFGH"
' マスク型*
C1FlexGrid1.Rows(3).DataType = GetType(String)
C1FlexGrid1(3, 2) = "1234567890"
C1FlexGrid1.Rows(3).EditMask = "(999) 999-9999"
' 数値型(整数)*
C1FlexGrid1.Rows(4).DataType = GetType(Integer)
C1FlexGrid1.Rows(4).Format = "###,##0"
C1FlexGrid1(4, 2) = 12345678
' 数値型(浮動小数)*
C1FlexGrid1.Rows(5).DataType = GetType(Double)
C1FlexGrid1.Rows(5).Format = "F2"
C1FlexGrid1(5, 2) = 123.456
' 数値型(通貨)*
C1FlexGrid1.Rows(6).DataType = GetType(Integer)
C1FlexGrid1.Rows(6).Format = "C0"
C1FlexGrid1(6, 2) = 123456
' 数値型(指数表記)*
C1FlexGrid1.Rows(7).DataType = GetType(Integer)
C1FlexGrid1.Rows(7).Format = "E2"
C1FlexGrid1(7, 2) = 1234500
' 数値型(パーセント)*
C1FlexGrid1.Rows(8).DataType = GetType(Double)
C1FlexGrid1.Rows(8).Format = "P2"
C1FlexGrid1(8, 2) = 0.12345
' 数値型(計算式)
C1FlexGrid1.Rows(9).DataType = GetType(Double)
C1FlexGrid1.Rows(9).Format = "#,###.000"
'C1FlexGrid1.Rows(9).Editor = New NumericTextBox(C1FlexGrid1.Rows(9).Format, True)
C1FlexGrid1.Rows(9).StyleNew.BackColor = Color.LightGray
' 日付型*
' デフォルトで、カレンダーがプルダウン
C1FlexGrid1.Rows(10).DataType = GetType(Date)
C1FlexGrid1.Rows(10).Format = "yyyy.MM.dd"
C1FlexGrid1(10, 2) = Date.Today
' 時刻型*
' SetupEditorイベントで、スピンボタンを表示
C1FlexGrid1.Rows(11).DataType = GetType(Date)
C1FlexGrid1.Rows(11).Format = "tt hh:mm"
C1FlexGrid1(11, 2) = Date.Now
' チェックボックス型*
C1FlexGrid1.Rows(12).DataType = GetType(Boolean)
' チェックボックス型(3値)
C1FlexGrid1.Rows(13).DataType = GetType(Boolean)
C1FlexGrid1(13, 2) = True
C1FlexGrid1(13, 3) = False
'c1FlexGrid1[13, 4] = null;
C1FlexGrid1.SetCellCheck(13, 4, CheckEnum.TSGrayed)
' チェックボックス型(DataTypeをブール値にせず、直接描画)
C1FlexGrid1.SetCellCheck(14, 2, CheckEnum.TSChecked)
C1FlexGrid1.SetCellCheck(14, 3, CheckEnum.TSUnchecked)
C1FlexGrid1.SetCellCheck(14, 4, CheckEnum.TSGrayed)
C1FlexGrid1.Rows(14).StyleNew.ImageAlign = ImageAlignEnum.CenterCenter
' 画像型*
Dim img As Image = Image.FromFile("../../test.png")
C1FlexGrid1.Rows(15).DataType = GetType(Image)
C1FlexGrid1(15, 2) = img
C1FlexGrid1.Rows(15).Height = 30
' 画像型(SetCellImage)
C1FlexGrid1.SetCellImage(16, 2, img)
C1FlexGrid1.Rows(16).Height = 30
C1FlexGrid1.Rows(16).ImageAlign = ImageAlignEnum.CenterCenter
' リストボックス型(ComboList)*:テキスト入力不可
C1FlexGrid1.Rows(17).ComboList = "a|b|c|d"
' コンボボックス型(ComboList)*:テキスト入力可能
C1FlexGrid1.Rows(18).ComboList = "|A|B|C|D"
' コンボボックス型(ComboBox)
C1FlexGrid1.Rows(19).DataType = GetType(String)
C1FlexGrid1.Rows(19).Editor = comboBox1
' コンボボックス型(複数列) : MultiColumnDictionary クラスを使用
Dim dt As DataTable = New DataTable("Test")
dt.Columns.Add("Code", GetType(Integer))
dt.Columns.Add("Name", GetType(String))
dt.Columns.Add("Address", GetType(String))
dt.Rows.Add(101, "AAAA", "Sendai")
dt.Rows.Add(102, "BBBB", "Tokyo")
dt.Rows.Add(103, "CCCC", "Osaka")
dt.Rows.Add(104, "DDDD", "Fukuoka")
Dim mcd As MultiColumnDictionary = New MultiColumnDictionary(dt, "Code", New String() {"Code", "Name", "Address"}, 1)
C1FlexGrid1.Rows(20).DataMap = mcd
' コンボボックス型(画像+テキスト)
Dim imgMap As Hashtable = New Hashtable()
Dim dataMap As Hashtable = New Hashtable()
For i As Integer = 0 To imageList1.Images.Count - 1
imgMap.Add(i, imageList1.Images(imageList1.Images.Count - i - 1))
dataMap.Add(i, "AAAA_" & (imageList1.Images.Count - i - 1).ToString().ToString())
Next
C1FlexGrid1.Rows(21).DataType = GetType(Integer)
C1FlexGrid1.Rows(21).ImageMap = imgMap
C1FlexGrid1.Rows(21).DataMap = dataMap
' コマンドボタン型(Button)
button1.TextAlign = ContentAlignment.MiddleCenter
C1FlexGrid1.Rows(22).Editor = button1
AddHandler button1.Click, AddressOf button1_Click
'(通常時の背景画像を設定)
C1FlexGrid1.Rows(22).StyleNew.BackgroundImage = Image.FromFile("../../btn_normal.png")
C1FlexGrid1.Rows(22).Style.BackgroundImageLayout = ImageAlignEnum.Stretch
C1FlexGrid1.Rows(22).Style.TextAlign = TextAlignEnum.CenterCenter
' セルボタン型*
C1FlexGrid1.Rows(23).ComboList = "..."
AddHandler C1FlexGrid1.CellButtonClick, AddressOf C1FlexGrid1_CellButtonClick
' セルボタン型(編集可)*
C1FlexGrid1.Rows(24).ComboList = "|..."
'c1FlexGrid1.CellButtonClick += c1FlexGrid1_CellButtonClick;
' セルボタン型(フォント選択)
C1FlexGrid1.Rows(25).DataType = GetType(Font)
'C1FlexGrid1.Rows(25).Editor = New FontPicker()
C1FlexGrid1.Rows(25).StyleNew.BackColor = Color.LightGray
' セルボタン型(ファイル選択)
C1FlexGrid1.Rows(26).DataType = GetType(String)
'C1FlexGrid1.Rows(26).Editor = New FileNamePicker()
C1FlexGrid1.Rows(26).StyleNew.BackColor = Color.LightGray
' セルボタン型(画像選択)
C1FlexGrid1.Rows(27).DataType = GetType(Image)
'C1FlexGrid1.Rows(27).Editor = New ImagePicker()
C1FlexGrid1.Rows(27).Height = 40
C1FlexGrid1.Rows(27).StyleNew.BackColor = Color.LightGray
' プルダウン型(色選択)
C1FlexGrid1.Rows(28).DataType = GetType(Color)
'C1FlexGrid1.Rows(28).Editor = New ColorPicker()
C1FlexGrid1.Rows(28).StyleNew.BackColor = Color.LightGray
' アップダウンボタン型(数値)
C1FlexGrid1.Rows(29).DataType = GetType(Integer)
C1FlexGrid1.Rows(29).Editor = numericUpDown1
numericUpDown1.Maximum = 110
C1FlexGrid1(29, 2) = 100
' アップダウンボタン型(テキスト)
C1FlexGrid1.Rows(30).DataType = GetType(String)
C1FlexGrid1.Rows(30).Editor = domainUpDown1
C1FlexGrid1(30, 2) = "wwww"
' トグルボタン型(Yes/No)
C1FlexGrid1.Rows(31).DataType = GetType(Boolean)
C1FlexGrid1.Rows(31).Format = "Yes;No"
C1FlexGrid1.Rows(31).TextAlign = TextAlignEnum.CenterCenter
C1FlexGrid1(31, 2) = True
' ハイパーリンク型
C1FlexGrid1.Rows(32).DataType = GetType(String)
C1FlexGrid1.Rows(32).StyleNew.ForeColor = Color.Blue
C1FlexGrid1.Rows(32).Style.Font = New Font(C1FlexGrid1.Font.FontFamily, C1FlexGrid1.Font.Size, FontStyle.Underline)
C1FlexGrid1(32, 2) = "https://www.mescius.com/"
End Sub
Private Sub C1FlexGrid1_ValidateEdit(sender As Object, e As ValidateEditEventArgs) Handles C1FlexGrid1.ValidateEdit
' チェックボックス型(3値)の場合
If e.Row = 13 Then
e.Cancel = True
C1FlexGrid1(0, 2) = C1FlexGrid1(e.Row, e.Col)
If C1FlexGrid1(e.Row, e.Col) Is Nothing OrElse C1FlexGrid1(e.Row, e.Col) Is DBNull.Value Then
C1FlexGrid1(e.Row, e.Col) = False
ElseIf CBool(C1FlexGrid1(e.Row, e.Col)) = False Then
C1FlexGrid1(e.Row, e.Col) = True
ElseIf CBool(C1FlexGrid1(e.Row, e.Col)) = True Then
C1FlexGrid1.SetCellCheck(e.Row, e.Col, CheckEnum.Grayed)
End If
End If
' チェックボックス型(DataTypeをブール値にせず、直接描画)
If e.Row = 14 Then
If e.Checkbox = CheckEnum.Unchecked OrElse e.Checkbox = CheckEnum.TSUnchecked Then
C1FlexGrid1.SetCellCheck(e.Row, e.Col, CheckEnum.TSUnchecked)
ElseIf e.Checkbox = CheckEnum.TSChecked Then
C1FlexGrid1.SetCellCheck(e.Row, e.Col, CheckEnum.TSChecked)
ElseIf e.Checkbox = CheckEnum.TSGrayed Then
C1FlexGrid1.SetCellCheck(e.Row, e.Col, CheckEnum.TSGrayed)
End If
End If
End Sub
Private Sub C1FlexGrid1_SetupEditor(sender As Object, e As RowColEventArgs) Handles C1FlexGrid1.SetupEditor
' 時刻型セルにスピンボタンを表示
If e.Row = 11 Then
Dim dateEditor = TryCast(C1FlexGrid1.Editor, DateTimePicker)
dateEditor.ShowUpDown = True
End If
End Sub
Private Sub C1FlexGrid1_CellButtonClick(sender As Object, e As RowColEventArgs)
' セルボタン型*がクリックされたときの処理
If e.Row = 23 Then
MessageBox.Show("セルボタン*がクリックされました")
' セルボタン型(編集可)*がクリックされたときの処理
ElseIf e.Row = 24 Then
MessageBox.Show("セルボタン(編集可)がクリックされました")
End If
End Sub
Private Sub C1FlexGrid1_MouseEnterCell(sender As Object, e As RowColEventArgs) Handles C1FlexGrid1.MouseEnterCell
' コマンドボタン型(Button)を編集状態にする
If e.Row = 22 Then
C1FlexGrid1.StartEditing(e.Row, e.Col)
End If
End Sub
Private Sub button1_Click(sender As Object, e As EventArgs)
' コマンドボタン型(Button)が押されたときの処理
MessageBox.Show("ボタンが押されました")
End Sub
Private Sub C1FlexGrid1_MouseDown(sender As Object, e As MouseEventArgs) Handles C1FlexGrid1.MouseDown
' ハイパーリンクをアクティブにする
If C1FlexGrid1.Row = 32 Then
Dim ht As HitTestInfo = C1FlexGrid1.HitTest(e.X, e.Y)
Dim hprLink = CStr(C1FlexGrid1(ht.Row, ht.Column))
If Not Equals(hprLink, Nothing) Then
Process.Start(hprLink)
End If
End If
End Sub
End Class
◎サンプルコード(C#)
using System.Data;
using System.Drawing;
using System.Windows.Forms;
using System.Diagnostics;
using C1.Win.C1FlexGrid;
namespace prj_C1FlexGrid
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
// 列数、行数の指定
c1FlexGrid1.Cols.Fixed = 2;
c1FlexGrid1.Rows.Count = 33;
// 列幅の設定
c1FlexGrid1.Cols[0].Width = 30;
c1FlexGrid1.Cols[1].Width = 200;
c1FlexGrid1.Cols[2].Width = 150;
// 固定列の番号
for (int i = 1; i < c1FlexGrid1.Rows.Count; i++)
{
c1FlexGrid1[i, 0] = i;
}
// ボタンを常時表示
c1FlexGrid1.ShowButtons = ShowButtonsEnum.Always;
// ハイパーリンクの書式を設定するためにオーナー描画を使用
c1FlexGrid1.DrawMode = DrawModeEnum.OwnerDraw;
// タイトルの設定
c1FlexGrid1[0, 1] = " (セル型)";
c1FlexGrid1[1, 1] = "テキストボックス型*";
c1FlexGrid1[2, 1] = "テキストボックス型(TextBox)";
c1FlexGrid1[3, 1] = "マスク型*";
c1FlexGrid1[4, 1] = "数値型(整数)*";
c1FlexGrid1[5, 1] = "数値型(浮動小数)*";
c1FlexGrid1[6, 1] = "数値型(通貨)*";
c1FlexGrid1[7, 1] = "数値型(指数表記)*";
c1FlexGrid1[8, 1] = "数値型(パーセント)*";
c1FlexGrid1[9, 1] = "数値型(計算式:1+2等)";
c1FlexGrid1[10, 1] = "日付型*";
c1FlexGrid1[11, 1] = "時刻型*";
c1FlexGrid1[12, 1] = "チェックボックス型*";
c1FlexGrid1[13, 1] = "チェックボックス型(3値)";
c1FlexGrid1[14, 1] = "チェックボックス型(ブール型以外)";
c1FlexGrid1[15, 1] = "画像型*";
c1FlexGrid1[16, 1] = "画像型(SetCellImage)";
c1FlexGrid1[17, 1] = "リストボックス型(ComboList)*";
c1FlexGrid1[18, 1] = "コンボボックス型(ComboList)*";
c1FlexGrid1[19, 1] = "コンボボックス型(CombBox)";
c1FlexGrid1[20, 1] = "コンボボックス型(複数列)";
c1FlexGrid1[21, 1] = "コンボボックス型(画像+テキスト)";
c1FlexGrid1[22, 1] = "コマンドボタン型(Button)";
c1FlexGrid1[23, 1] = "セルボタン型*";
c1FlexGrid1[24, 1] = "セルボタン型(編集可)*";
c1FlexGrid1[25, 1] = "セルボタン型(フォント選択)";
c1FlexGrid1[26, 1] = "セルボタン型(ファイル選択)";
c1FlexGrid1[27, 1] = "セルボタン型(画像選択)";
c1FlexGrid1[28, 1] = "プルダウン型(色選択)";
c1FlexGrid1[29, 1] = "アップダウンボタン型(数値)";
c1FlexGrid1[30, 1] = "アップダウンボタン型(テキスト)";
c1FlexGrid1[31, 1] = "トグルボタン型(Yes/No)";
c1FlexGrid1[32, 1] = "ハイパーリンク型";
}
private void Form1_Load(object sender, EventArgs e)
{
// テキストボックス型*
c1FlexGrid1.Rows[1].DataType = typeof(string);
c1FlexGrid1[1, 2] = "abcdefgh";
// テキストボックス型(TextBox):エディタとして明示的にTextBoxを使用
c1FlexGrid1.Rows[2].Editor = textBox1;
c1FlexGrid1[2, 2] = "ABCDEFGH";
// マスク型*
c1FlexGrid1.Rows[3].DataType = typeof(string);
c1FlexGrid1[3, 2] = "1234567890";
c1FlexGrid1.Rows[3].EditMask = "(999) 999-9999";
// 数値型(整数)*
c1FlexGrid1.Rows[4].DataType = typeof(int);
c1FlexGrid1.Rows[4].Format = "###,##0";
c1FlexGrid1[4, 2] = 12345678;
// 数値型(浮動小数)*
c1FlexGrid1.Rows[5].DataType = typeof(double);
c1FlexGrid1.Rows[5].Format = "F2";
c1FlexGrid1[5, 2] = 123.456;
// 数値型(通貨)*
c1FlexGrid1.Rows[6].DataType = typeof(int);
c1FlexGrid1.Rows[6].Format = "C0";
c1FlexGrid1[6, 2] = 123456;
// 数値型(指数表記)*
c1FlexGrid1.Rows[7].DataType = typeof(int);
c1FlexGrid1.Rows[7].Format = "E2";
c1FlexGrid1[7, 2] = 1234500;
// 数値型(パーセント)*
c1FlexGrid1.Rows[8].DataType = typeof(double);
c1FlexGrid1.Rows[8].Format = "P2";
c1FlexGrid1[8, 2] = 0.12345;
// 数値型(計算式)
c1FlexGrid1.Rows[9].DataType = typeof(double);
c1FlexGrid1.Rows[9].Format = "#,###.000";
c1FlexGrid1.Rows[9].Editor = new NumericTextBox(c1FlexGrid1.Rows[9].Format, true);
// 日付型*
// デフォルトで、カレンダーがプルダウン
c1FlexGrid1.Rows[10].DataType = typeof(DateTime);
c1FlexGrid1.Rows[10].Format = "yyyy.MM.dd";
c1FlexGrid1[10, 2] = DateTime.Today;
// 時刻型*
// SetupEditorイベントで、スピンボタンを表示
c1FlexGrid1.Rows[11].DataType = typeof(DateTime);
c1FlexGrid1.Rows[11].Format = "tt hh:mm";
c1FlexGrid1[11, 2] = DateTime.Now;
// チェックボックス型*
c1FlexGrid1.Rows[12].DataType = typeof(bool);
// チェックボックス型(3値)
c1FlexGrid1.Rows[13].DataType = typeof(bool);
c1FlexGrid1[13, 2] = true;
c1FlexGrid1[13, 3] = false;
//c1FlexGrid1[13, 4] = null;
c1FlexGrid1.SetCellCheck(13, 4, CheckEnum.TSGrayed);
// チェックボックス型(DataTypeをブール値にせず、直接描画)
c1FlexGrid1.SetCellCheck(14, 2, CheckEnum.TSChecked);
c1FlexGrid1.SetCellCheck(14, 3, CheckEnum.TSUnchecked);
c1FlexGrid1.SetCellCheck(14, 4, CheckEnum.TSGrayed);
c1FlexGrid1.Rows[14].StyleNew.ImageAlign = ImageAlignEnum.CenterCenter;
// 画像型*
Image img = Image.FromFile("../../test.png");
c1FlexGrid1.Rows[15].DataType = typeof(Image);
c1FlexGrid1[15, 2] = img;
c1FlexGrid1.Rows[15].Height = 30;
// 画像型(SetCellImage)
c1FlexGrid1.SetCellImage(16, 2, img);
c1FlexGrid1.Rows[16].Height = 30;
c1FlexGrid1.Rows[16].ImageAlign = ImageAlignEnum.CenterCenter;
// リストボックス型(ComboList)*:テキスト入力不可
c1FlexGrid1.Rows[17].ComboList = "a|b|c|d";
// コンボボックス型(ComboList)*:テキスト入力可能
c1FlexGrid1.Rows[18].ComboList = "|A|B|C|D";
// コンボボックス型(ComboBox)
c1FlexGrid1.Rows[19].DataType = typeof(string);
c1FlexGrid1.Rows[19].Editor = comboBox1;
// コンボボックス型(複数列) : MultiColumnDictionary クラスを使用
DataTable dt = new DataTable("Test");
dt.Columns.Add("Code", typeof(int));
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("Address", typeof(string));
dt.Rows.Add(101, "AAAA", "Sendai");
dt.Rows.Add(102, "BBBB", "Tokyo");
dt.Rows.Add(103, "CCCC", "Osaka");
dt.Rows.Add(104, "DDDD", "Fukuoka");
MultiColumnDictionary mcd = new MultiColumnDictionary(dt, "Code", new string[] { "Code", "Name", "Address" }, 1);
c1FlexGrid1.Rows[20].DataMap = mcd;
// コンボボックス型(画像+テキスト)
System.Collections.Hashtable imgMap = new System.Collections.Hashtable();
System.Collections.Hashtable dataMap = new System.Collections.Hashtable();
for (int i = 0; i < imageList1.Images.Count; i++)
{
imgMap.Add(i, imageList1.Images[imageList1.Images.Count - i - 1]);
dataMap.Add(i, "AAAA_" + (imageList1.Images.Count - i - 1).ToString());
}
c1FlexGrid1.Rows[21].DataType = typeof(int);
c1FlexGrid1.Rows[21].ImageMap = imgMap;
c1FlexGrid1.Rows[21].DataMap = dataMap;
// コマンドボタン型(Button)
button1.TextAlign = ContentAlignment.MiddleCenter;
c1FlexGrid1.Rows[22].Editor = button1;
button1.Click += button1_Click;
//(通常時の背景画像を設定)
c1FlexGrid1.Rows[22].StyleNew.BackgroundImage = Image.FromFile("../../btn_normal.png");
c1FlexGrid1.Rows[22].Style.BackgroundImageLayout = ImageAlignEnum.Stretch;
c1FlexGrid1.Rows[22].Style.TextAlign = TextAlignEnum.CenterCenter;
// セルボタン型*
c1FlexGrid1.Rows[23].ComboList = "...";
c1FlexGrid1.CellButtonClick += c1FlexGrid1_CellButtonClick;
// セルボタン型(編集可)*
c1FlexGrid1.Rows[24].ComboList = "|...";
//c1FlexGrid1.CellButtonClick += c1FlexGrid1_CellButtonClick;
// セルボタン型(フォント選択)
c1FlexGrid1.Rows[25].DataType = typeof(Font);
c1FlexGrid1.Rows[25].Editor = new FontPicker();
// セルボタン型(ファイル選択)
c1FlexGrid1.Rows[26].DataType = typeof(string);
c1FlexGrid1.Rows[26].Editor = new FileNamePicker();
// セルボタン型(画像選択)
c1FlexGrid1.Rows[27].DataType = typeof(Image);
c1FlexGrid1.Rows[27].Editor = new ImagePicker();
c1FlexGrid1.Rows[27].Height = 40;
// プルダウン型(色選択)
c1FlexGrid1.Rows[28].DataType = typeof(Color);
c1FlexGrid1.Rows[28].Editor = new ColorPicker();
// アップダウンボタン型(数値)
c1FlexGrid1.Rows[29].DataType = typeof(int);
c1FlexGrid1.Rows[29].Editor = numericUpDown1;
numericUpDown1.Maximum = 110;
c1FlexGrid1[29, 2] = 100;
// アップダウンボタン型(テキスト)
c1FlexGrid1.Rows[30].DataType = typeof(string);
c1FlexGrid1.Rows[30].Editor = domainUpDown1;
c1FlexGrid1[30, 2] = "wwww";
// トグルボタン型(Yes/No)
c1FlexGrid1.Rows[31].DataType = typeof(bool);
c1FlexGrid1.Rows[31].Format = "Yes;No";
c1FlexGrid1.Rows[31].TextAlign = TextAlignEnum.CenterCenter;
c1FlexGrid1[31, 2] = true;
// ハイパーリンク型
c1FlexGrid1.Rows[32].DataType = typeof(string);
c1FlexGrid1.Rows[32].StyleNew.ForeColor = Color.Blue;
c1FlexGrid1.Rows[32].Style.Font = new Font(c1FlexGrid1.Font.FontFamily, c1FlexGrid1.Font.Size, FontStyle.Underline);
c1FlexGrid1[32, 2] = "https://www.mescius.com/";
}
private void c1FlexGrid1_ValidateEdit(object sender, ValidateEditEventArgs e)
{
// チェックボックス型(3値)の場合
if (e.Row == 13)
{
e.Cancel = true;
c1FlexGrid1[0, 2] = c1FlexGrid1[e.Row, e.Col];
if (c1FlexGrid1[e.Row, e.Col] == null || c1FlexGrid1[e.Row, e.Col] == DBNull.Value)
{
c1FlexGrid1[e.Row, e.Col] = false;
}
else if ((bool)c1FlexGrid1[e.Row, e.Col] == false)
{
c1FlexGrid1[e.Row, e.Col] = true;
}
else if ((bool)c1FlexGrid1[e.Row, e.Col] == true)
{
c1FlexGrid1.SetCellCheck(e.Row, e.Col, CheckEnum.Grayed);
}
}
// チェックボックス型(DataTypeをブール値にせず、直接描画)
if (e.Row == 14)
{
if (e.Checkbox == CheckEnum.Unchecked || e.Checkbox == CheckEnum.TSUnchecked)
{
c1FlexGrid1.SetCellCheck(e.Row, e.Col, CheckEnum.TSUnchecked);
}
else if (e.Checkbox == CheckEnum.TSChecked)
{
c1FlexGrid1.SetCellCheck(e.Row, e.Col, CheckEnum.TSChecked);
}
else if (e.Checkbox == CheckEnum.TSGrayed)
{
c1FlexGrid1.SetCellCheck(e.Row, e.Col, CheckEnum.TSGrayed);
}
}
}
private void c1FlexGrid1_SetupEditor(object sender, RowColEventArgs e)
{
// 時刻型セルにスピンボタンを表示
if (e.Row == 11)
{
var dateEditor = c1FlexGrid1.Editor as DateTimePicker;
dateEditor.ShowUpDown = true;
}
}
private void c1FlexGrid1_CellButtonClick(object sender, RowColEventArgs e)
{
// セルボタン型*がクリックされたときの処理
if (e.Row == 23)
{
MessageBox.Show("セルボタン*がクリックされました");
}
// セルボタン型(編集可)*がクリックされたときの処理
else if (e.Row == 24)
{
MessageBox.Show("セルボタン(編集可)がクリックされました");
}
}
private void c1FlexGrid1_MouseEnterCell(object sender, RowColEventArgs e)
{
// コマンドボタン型(Button)を編集状態にする
if (e.Row == 22)
{
c1FlexGrid1.StartEditing(e.Row, e.Col);
}
}
private void button1_Click(object sender, EventArgs e)
{
// コマンドボタン型(Button)が押されたときの処理
MessageBox.Show("ボタンが押されました");
}
private void c1FlexGrid1_MouseDown(object sender, MouseEventArgs e)
{
// ハイパーリンクをアクティブにする
if (c1FlexGrid1.Row == 32)
{
HitTestInfo ht = c1FlexGrid1.HitTest(e.X, e.Y);
string hprLink = (string)c1FlexGrid1[ht.Row, ht.Column];
if (hprLink != null)
{
Process.Start(hprLink);
}
}
}
}
}