作成日: 2018/09/05 最終更新日: 2018/09/05
文書種別
使用方法
詳細
List型のプロパティを持つユーザー定義クラスをデータソースとして用いることで、C1FlexGridのコンボボックスに、行ごとに異なるリスト項目を設定することができます。
例として、Country、States、StateOptionsというプロパティを持つユーザークラスを考えます。3番目のStateOptionsは、Statesの項目を示すList型のプロパティです。
このユーザークラスの新規オブジェクトを作成し、Countryに国名、StateOptionsに該当する州名Listを設定すると、1レコード生成できます。このレコードを複数追加したリストオブジェクトを作成して、C1FlexGridのデータソースに設定します。
さらに、BeforeEditイベント内で、StateOptionsの州名Listをデータソースに設定したComboBoxを、2列目のエディタに指定します。これによりグリッドの2列目にコンボボックスが表示され、行ごとに異なるリスト項目がプルダウンします。
◎サンプルコード(VB)
◎サンプルコード(C#)
例として、Country、States、StateOptionsというプロパティを持つユーザークラスを考えます。3番目のStateOptionsは、Statesの項目を示すList型のプロパティです。
このユーザークラスの新規オブジェクトを作成し、Countryに国名、StateOptionsに該当する州名Listを設定すると、1レコード生成できます。このレコードを複数追加したリストオブジェクトを作成して、C1FlexGridのデータソースに設定します。
さらに、BeforeEditイベント内で、StateOptionsの州名Listをデータソースに設定したComboBoxを、2列目のエディタに指定します。これによりグリッドの2列目にコンボボックスが表示され、行ごとに異なるリスト項目がプルダウンします。
◎サンプルコード(VB)
Imports C1.Win.C1FlexGrid
Public Class Form1
Private objectList As List(Of CountryDetails)
Dim ComboBox1 As ComboBox = New ComboBox()
Public Sub New()
InitializeComponent()
End Sub
' C1FlexGridにデータソースを設定
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
objectList = setupMyBusinessObject()
C1FlexGrid1.DataSource = objectList
End Sub
' 複数レコードの作成
Private Function setupMyBusinessObject() As List(Of CountryDetails)
Dim mboList As New List(Of CountryDetails)()
Dim mbo As New CountryDetails()
mbo.Country = "Afghanistan"
mbo.StateOptions = New List(Of String)()
mbo.StateOptions.Add("Mazar-i-Sharif")
mbo.StateOptions.Add("Kabul")
mbo.StateOptions.Add("Kandahar")
mbo.StateOptions.Add("Herat")
mbo.StateOptions.Add("Kunduz")
mboList.Add(mbo)
mbo = New CountryDetails()
mbo.Country = "Belgium"
mbo.StateOptions = New List(Of String)()
mbo.StateOptions.Add("Antwerp")
mbo.StateOptions.Add("East Flanders")
mbo.StateOptions.Add("Flemish Brabant")
mbo.StateOptions.Add("Flemish Brabant")
mbo.StateOptions.Add("West Flanders")
mboList.Add(mbo)
mbo = New CountryDetails()
mbo.Country = "Canada"
mbo.StateOptions = New List(Of String)()
mbo.StateOptions.Add("Ontario")
mbo.StateOptions.Add("Quebec")
mbo.StateOptions.Add("Nova Scotia")
mbo.StateOptions.Add("New Brunswick")
mbo.StateOptions.Add("Manitoba")
mboList.Add(mbo)
Return (mboList)
End Function
' コンボボックスを2列目のエディタとして設定
Private Sub c1FlexGrid1_BeforeEdit(sender As Object, e As RowColEventArgs) Handles C1FlexGrid1.BeforeEdit
If e.Col = 2 Then
ComboBox1.DataSource = objectList(e.Row - 1).StateOptions
C1FlexGrid1.Cols(2).Editor = ComboBox1
End If
End Sub
End Class
' ユーザー定義クラス
Public Class CountryDetails
Public Property Country() As String
Get
Return m_Country
End Get
Set(value As String)
m_Country = Value
End Set
End Property
Private m_Country As String
Public Property States() As String
Get
Return m_States
End Get
Set(value As String)
m_States = Value
End Set
End Property
Private m_States As String
Public Property StateOptions() As List(Of String)
Get
Return m_StateOptions
End Get
Set(value As List(Of String))
m_StateOptions = Value
End Set
End Property
Private m_StateOptions As List(Of String)
Public Sub New()
End Sub
End Class
Public Class Form1
Private objectList As List(Of CountryDetails)
Dim ComboBox1 As ComboBox = New ComboBox()
Public Sub New()
InitializeComponent()
End Sub
' C1FlexGridにデータソースを設定
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
objectList = setupMyBusinessObject()
C1FlexGrid1.DataSource = objectList
End Sub
' 複数レコードの作成
Private Function setupMyBusinessObject() As List(Of CountryDetails)
Dim mboList As New List(Of CountryDetails)()
Dim mbo As New CountryDetails()
mbo.Country = "Afghanistan"
mbo.StateOptions = New List(Of String)()
mbo.StateOptions.Add("Mazar-i-Sharif")
mbo.StateOptions.Add("Kabul")
mbo.StateOptions.Add("Kandahar")
mbo.StateOptions.Add("Herat")
mbo.StateOptions.Add("Kunduz")
mboList.Add(mbo)
mbo = New CountryDetails()
mbo.Country = "Belgium"
mbo.StateOptions = New List(Of String)()
mbo.StateOptions.Add("Antwerp")
mbo.StateOptions.Add("East Flanders")
mbo.StateOptions.Add("Flemish Brabant")
mbo.StateOptions.Add("Flemish Brabant")
mbo.StateOptions.Add("West Flanders")
mboList.Add(mbo)
mbo = New CountryDetails()
mbo.Country = "Canada"
mbo.StateOptions = New List(Of String)()
mbo.StateOptions.Add("Ontario")
mbo.StateOptions.Add("Quebec")
mbo.StateOptions.Add("Nova Scotia")
mbo.StateOptions.Add("New Brunswick")
mbo.StateOptions.Add("Manitoba")
mboList.Add(mbo)
Return (mboList)
End Function
' コンボボックスを2列目のエディタとして設定
Private Sub c1FlexGrid1_BeforeEdit(sender As Object, e As RowColEventArgs) Handles C1FlexGrid1.BeforeEdit
If e.Col = 2 Then
ComboBox1.DataSource = objectList(e.Row - 1).StateOptions
C1FlexGrid1.Cols(2).Editor = ComboBox1
End If
End Sub
End Class
' ユーザー定義クラス
Public Class CountryDetails
Public Property Country() As String
Get
Return m_Country
End Get
Set(value As String)
m_Country = Value
End Set
End Property
Private m_Country As String
Public Property States() As String
Get
Return m_States
End Get
Set(value As String)
m_States = Value
End Set
End Property
Private m_States As String
Public Property StateOptions() As List(Of String)
Get
Return m_StateOptions
End Get
Set(value As List(Of String))
m_StateOptions = Value
End Set
End Property
Private m_StateOptions As List(Of String)
Public Sub New()
End Sub
End Class
◎サンプルコード(C#)
using C1.Win.C1FlexGrid;
namespace DynamicFlexGrid
{
public partial class Form1 : Form
{
List objectList;
ComboBox comboBox1 = new ComboBox();
public Form1()
{
InitializeComponent();
}
// C1FlexGridにデータソースを設定
private void Form1_Load(object sender, EventArgs e)
{
objectList = setupMyBusinessObject();
c1FlexGrid1.DataSource = objectList;
}
// 複数レコードの作成
List setupMyBusinessObject()
{
List mboList = new List();
CountryDetails mbo = new CountryDetails();
mbo.Country = "Afghanistan";
mbo.StateOptions = new List();
mbo.StateOptions.Add("Mazar-i-Sharif");
mbo.StateOptions.Add("Kabul");
mbo.StateOptions.Add("Kandahar");
mbo.StateOptions.Add("Herat");
mbo.StateOptions.Add("Kunduz");
mboList.Add(mbo);
mbo = new CountryDetails();
mbo.Country = "Belgium";
mbo.StateOptions = new List();
mbo.StateOptions.Add("Antwerp");
mbo.StateOptions.Add("East Flanders");
mbo.StateOptions.Add("Flemish Brabant");
mbo.StateOptions.Add("Flemish Brabant");
mbo.StateOptions.Add("West Flanders");
mboList.Add(mbo);
mbo = new CountryDetails();
mbo.Country = "Canada";
mbo.StateOptions = new List();
mbo.StateOptions.Add("Ontario");
mbo.StateOptions.Add("Quebec");
mbo.StateOptions.Add("Nova Scotia");
mbo.StateOptions.Add("New Brunswick");
mbo.StateOptions.Add("Manitoba");
mboList.Add(mbo);
return (mboList);
}
// コンボボックスを2列目のエディタとして設定
private void c1FlexGrid1_BeforeEdit(object sender, RowColEventArgs e)
{
if (e.Col == 2)
{
comboBox1.DataSource = objectList[e.Row - 1].StateOptions;
c1FlexGrid1.Cols[2].Editor = comboBox1;
}
}
}
// ユーザー定義クラス
public class CountryDetails
{
public string Country { get; set; }
public string States { get; set; }
public List StateOptions { get; set; }
public CountryDetails() { }
}
}
namespace DynamicFlexGrid
{
public partial class Form1 : Form
{
List
ComboBox comboBox1 = new ComboBox();
public Form1()
{
InitializeComponent();
}
// C1FlexGridにデータソースを設定
private void Form1_Load(object sender, EventArgs e)
{
objectList = setupMyBusinessObject();
c1FlexGrid1.DataSource = objectList;
}
// 複数レコードの作成
List
{
List
CountryDetails mbo = new CountryDetails();
mbo.Country = "Afghanistan";
mbo.StateOptions = new List
mbo.StateOptions.Add("Mazar-i-Sharif");
mbo.StateOptions.Add("Kabul");
mbo.StateOptions.Add("Kandahar");
mbo.StateOptions.Add("Herat");
mbo.StateOptions.Add("Kunduz");
mboList.Add(mbo);
mbo = new CountryDetails();
mbo.Country = "Belgium";
mbo.StateOptions = new List
mbo.StateOptions.Add("Antwerp");
mbo.StateOptions.Add("East Flanders");
mbo.StateOptions.Add("Flemish Brabant");
mbo.StateOptions.Add("Flemish Brabant");
mbo.StateOptions.Add("West Flanders");
mboList.Add(mbo);
mbo = new CountryDetails();
mbo.Country = "Canada";
mbo.StateOptions = new List
mbo.StateOptions.Add("Ontario");
mbo.StateOptions.Add("Quebec");
mbo.StateOptions.Add("Nova Scotia");
mbo.StateOptions.Add("New Brunswick");
mbo.StateOptions.Add("Manitoba");
mboList.Add(mbo);
return (mboList);
}
// コンボボックスを2列目のエディタとして設定
private void c1FlexGrid1_BeforeEdit(object sender, RowColEventArgs e)
{
if (e.Col == 2)
{
comboBox1.DataSource = objectList[e.Row - 1].StateOptions;
c1FlexGrid1.Cols[2].Editor = comboBox1;
}
}
}
// ユーザー定義クラス
public class CountryDetails
{
public string Country { get; set; }
public string States { get; set; }
public List
public CountryDetails() { }
}
}
関連情報
旧文書番号
83201