作成日: 2023/05/23 最終更新日: 2023/05/23
文書種別
使用方法
詳細
ドロップダウンコンボのリスト項目にDataMapを指定することで、コンボボックスのリスト項目とは別の値をC1FlexGridに表示することが可能です。
また、さらにもう一つのDataMapを使用し、AfterEditイベントにて、C1FlexGridのGetDataメソッドで取得したDataMapのキー値をUserDataプロパティに保存して、内部値として使用することができます。
以下に簡単な設定例を記載します。

ここでは、ListDictionaryクラスを使用した1つめのデータマップで、選択したリスト項目を表示値に変換します。さらに、別のListDictionaryクラスを使用した2つめのデータマップで、リスト項目を内部値に変換し、フォームのタイトルバーに表示します。
なお、リスト項目 / 表示値 / 内部値として以下のような値を用いています。
日本 / 日 / 0
アメリカ / 米 / 1
イギリス / 英 / 2
◎サンプルコード(VB)
また、さらにもう一つのDataMapを使用し、AfterEditイベントにて、C1FlexGridのGetDataメソッドで取得したDataMapのキー値をUserDataプロパティに保存して、内部値として使用することができます。
以下に簡単な設定例を記載します。
ここでは、ListDictionaryクラスを使用した1つめのデータマップで、選択したリスト項目を表示値に変換します。さらに、別のListDictionaryクラスを使用した2つめのデータマップで、リスト項目を内部値に変換し、フォームのタイトルバーに表示します。
なお、リスト項目 / 表示値 / 内部値として以下のような値を用いています。
日本 / 日 / 0
アメリカ / 米 / 1
イギリス / 英 / 2
◎サンプルコード(VB)
Imports System.Collections.Specialized
Imports C1.Win.C1FlexGrid
Public Class Form1
Dim dtMap1 As ListDictionary = New ListDictionary()
Dim dtMap2 As ListDictionary = New ListDictionary()
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' ドロップダウンリスト⇒表示値変換用DataMap
dtMap1.Add("日本", "日")
dtMap1.Add("アメリカ", "米")
dtMap1.Add("イギリス", "英")
' ドロップダウンリスト⇒内部値用DataMap
dtMap2.Add("日本", 0)
dtMap2.Add("アメリカ", 1)
dtMap2.Add("イギリス", 2)
' コンボボックスのドロップダウンの設定
C1FlexGrid1.Cols(1).ComboList = "日本|アメリカ|イギリス"
' データマップで表示値を変換
C1FlexGrid1.Cols(1).Caption = "DataMap利用"
C1FlexGrid1.Cols(1).DataMap = dtMap1
End Sub
Private Sub C1FlexGrid1_AfterEdit(sender As Object, e As C1.Win.C1FlexGrid.RowColEventArgs) Handles C1FlexGrid1.AfterEdit
' ドロップダウンリスト⇒内部値(UserDataを利用)に変換
Dim myKeys() As String = New String((dtMap2.Count) - 1) {}
dtMap2.Keys.CopyTo(myKeys, 0)
Dim myValues() As Int32 = New Int32((dtMap2.Count) - 1) {}
dtMap2.Values.CopyTo(myValues, 0)
Dim cr As CellRange = C1FlexGrid1.GetCellRange(e.Row, e.Col)
If (e.Col = 1) Then
Dim j As Integer
For j = 0 To dtMap2.Count - 1
If (myKeys(j) = C1FlexGrid1(e.Row, e.Col).ToString) Then
cr.UserData = myValues(j)
Me.Text = "内部値(UserData) = " + cr.UserData.ToString()
End If
Next
End If
End Sub
End Class
◎サンプルコード(C#)
using System.Collections.Specialized;
using C1.Win.C1FlexGrid;
namespace prj_C1FlexGrid
{
public partial class Form1 : Form
{
ListDictionary dtMap1 = new ListDictionary();
ListDictionary dtMap2 = new ListDictionary();
public Form1()
{
InitializeComponent();
//ドロップダウンリスト⇒表示値変換用DataMap
dtMap1.Add("日本", "日");
dtMap1.Add("アメリカ", "米");
dtMap1.Add("イギリス", "英");
//ドロップダウンリスト⇒内部値用DataMap
dtMap2.Add("日本", 0);
dtMap2.Add("アメリカ", 1);
dtMap2.Add("イギリス", 2);
// コンボボックスのドロップダウンの設定
c1FlexGrid1.Cols[1].ComboList = "日本|アメリカ|イギリス";
// データマップで表示値を変換
c1FlexGrid1.Cols[1].Caption = "DataMap利用";
c1FlexGrid1.Cols[1].DataMap = dtMap1;
}
private void c1FlexGrid1_AfterEdit(object sender, C1.Win.C1FlexGrid.RowColEventArgs e)
{
// ドロップダウンリスト⇒内部値(UserDataを利用)に変換
String[] myKeys = new String[dtMap2.Count];
dtMap2.Keys.CopyTo(myKeys, 0);
Int32[] myValues = new Int32[dtMap2.Count];
dtMap2.Values.CopyTo(myValues, 0);
CellRange cr = c1FlexGrid1.GetCellRange(e.Row, e.Col);
if (e.Col == 1)
{
for (int j = 0; j < dtMap2.Count; j++)
{
if (myKeys[j] == c1FlexGrid1[e.Row, e.Col].ToString())
{
cr.UserData = myValues[j];
this.Text = "内部値(UserData) = " + cr.UserData;
System.Diagnostics.Debug.WriteLine("UserData = " + cr.UserData);
}
}
}
}
}
}