作成日: 2022/06/21 最終更新日: 2022/06/21
文書種別
使用方法
詳細
GanttViewでは、基本的に、データソースの1つのカスタムフィールド列を単一のCustomFields.MappingNameプロパティにマッピングし、内部的にXML文字列に格納して使用します。
そのため、データソースの複数のカスタムフィールド列を表示させるには、次のような工夫が必要です。
※ 以下は、データソースとしてDataTableを使用し、2つのカスタムフィールド列を表示する例。
(1) GanttViewの列に、2つのCustomFieldColumn*を追加します。
*名前="CustomField1"、"CustomField2"。
(2) DataTableに、2つのカスタムフィールド列と、共通カスタムフィールド列*を設定します。
*名前="CustomField1"、"CustomField2"、"CommonCustomField"。
(3) "CommonCustomField"列に用いるXML形式の定義文字*を設定します。
*例)const string XML_FORMAT = "<?xml version=""1.0"" encoding=""utf-16""?><fieldValues><fieldValue key = ""CustomField1"" valueType=""System.String"" value=""{0}""/><fieldValue key = ""CustomField2"" valueType=""System.String"" value=""{1}""/></fieldValues>" ";
(4) この定義文字を用いて、"CommonCustomField"列の値を設定*します。
*例)値 = string.Format(XML_FORMAT, "Custom Value 1", "Custom Value 2");
(5) GanttViewのMappingNameプロパティを、"CommonCustomField"に設定します。
*例)tasksStorage.Mappings.CustomFields.MappingName = "CommonCustomField";
これにより、GanttViewに、"CustomField1"、"CustomField2"が表示されるようになります。

上記の設定コード全体を以下に記載します。
◎サンプルコード(VB)
そのため、データソースの複数のカスタムフィールド列を表示させるには、次のような工夫が必要です。
※ 以下は、データソースとしてDataTableを使用し、2つのカスタムフィールド列を表示する例。
(1) GanttViewの列に、2つのCustomFieldColumn*を追加します。
*名前="CustomField1"、"CustomField2"。
(2) DataTableに、2つのカスタムフィールド列と、共通カスタムフィールド列*を設定します。
*名前="CustomField1"、"CustomField2"、"CommonCustomField"。
(3) "CommonCustomField"列に用いるXML形式の定義文字*を設定します。
*例)const string XML_FORMAT = "<?xml version=""1.0"" encoding=""utf-16""?><fieldValues><fieldValue key = ""CustomField1"" valueType=""System.String"" value=""{0}""/><fieldValue key = ""CustomField2"" valueType=""System.String"" value=""{1}""/></fieldValues>" ";
(4) この定義文字を用いて、"CommonCustomField"列の値を設定*します。
*例)値 = string.Format(XML_FORMAT, "Custom Value 1", "Custom Value 2");
(5) GanttViewのMappingNameプロパティを、"CommonCustomField"に設定します。
*例)tasksStorage.Mappings.CustomFields.MappingName = "CommonCustomField";
これにより、GanttViewに、"CustomField1"、"CustomField2"が表示されるようになります。
上記の設定コード全体を以下に記載します。
◎サンプルコード(VB)
Imports C1.Win.C1GanttView
Imports C1.GanttView
Public Class Form1
Dim XML_FORMAT As String = "<?xml version=""1.0"" encoding=""utf-16""?><fieldValues><fieldValue key = ""CustomField1"" valueType=""System.String"" value=""{0}""/><fieldValue key = ""CustomField2"" valueType=""System.String"" value=""{1}""/></fieldValues>"
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
'GanttViewの列に、2つのCustomFieldColumn*を追加
Dim customCol As CustomFieldColumn = New CustomFieldColumn
customCol.Caption = "CustomField1"
customCol.DataType = GetType(System.String)
customCol.Name = "CustomField1"
customCol.Visible = True
C1GanttView1.Columns.Add(customCol)
'各種フィールドのマッピングの設定
customCol = New CustomFieldColumn
customCol.Caption = "CustomField2"
customCol.DataType = GetType(System.String)
customCol.Name = "CustomField2"
customCol.Visible = True
C1GanttView1.Columns.Add(customCol)
Dim TasksStorage1 As TasksStorage = C1GanttView1.DataStorage.TasksStorage()
TasksStorage1.Mappings.Name.MappingName = "Name"
TasksStorage1.Mappings.Start.MappingName = "Start"
TasksStorage1.Mappings.Duration.MappingName = "Duration"
TasksStorage1.Mappings.Initialized.MappingName = "Initialized"
'以下マッピングは、GanttViewの複数のカスタムフィールド列をDataTableの単一の列にマップします。
'GanttViewの各カスタムフィールド列の値は、XML形式の文字列として、DataTableのその単一の列に保存されます
TasksStorage1.Mappings.CustomFields.MappingName = "CommonCustomField"
'DataTableの値をデータソースに設定
TasksStorage1.DataSource = GetTasksTable(5)
End Sub
Private Function GetTasksTable(ByVal numberOfTasks As Integer) As DataTable
Dim dt As DataTable = New DataTable
dt.BeginLoadData()
dt.Columns.Add("Name", GetType(System.String))
dt.Columns.Add("Start", GetType(DateTime))
dt.Columns.Add("Duration", GetType(System.Double))
dt.Columns.Add("Initialized", GetType(System.Boolean))
'2つののカスタムフィールド列を追加
dt.Columns.Add("CustomField1", GetType(System.String))
dt.Columns.Add("CustomField2", GetType(System.String))
'結合用共通カスタムフィールド列を追加
dt.Columns.Add("CommonCustomField", GetType(System.String))
'"CommonCustomField"列の値をXML形式で設定
Dim rnd As Random = New Random
Dim i As Integer = 1
Do While (i <= numberOfTasks)
dt.Rows.Add("task {i}", DateTime.Today.AddDays(rnd.Next(-10, 10)), rnd.Next(1, 10), True, "Custom Value 1", "Custom Value 2", String.Format(XML_FORMAT, "Custom Value 1", "Custom Value 2"))
i = (i + 1)
Loop
dt.EndLoadData()
Return dt
End Function
End Class
◎サンプルコード(C#)
using C1.Win.C1GanttView;
namespace GanttView_BindingSample
{
public partial class Form1 : Form
{
const string XML_FORMAT = "<?xml version=""1.0"" encoding=""utf-16""?><fieldValues><fieldValue key = ""CustomField1"" valueType=""System.String"" value=""{0}""/><fieldValue key = ""CustomField2"" valueType=""System.String"" value=""{1}""/></fieldValues>";
public Form1()
{
InitializeComponent();
}
private void Form1_Load(object sender, EventArgs e)
{
BindGanttView();
}
///
/// Adds custom fields in the GanttView and binds it to the DataTable
///
private void BindGanttView()
{
//GanttViewの列に、2つのCustomFieldColumnを追加
CustomFieldColumn customCol = new CustomFieldColumn();
customCol.Caption = "CustomField1";
customCol.DataType = typeof(string);
customCol.Name = "CustomField1";
customCol.Visible = true;
c1GanttView1.Columns.Add(customCol);
customCol = new CustomFieldColumn();
customCol.Caption = "CustomField2";
customCol.DataType = typeof(string);
customCol.Name = "CustomField2";
customCol.Visible = true;
c1GanttView1.Columns.Add(customCol);
//各種フィールドのマッピングの設定
var tasksStorage = c1GanttView1.DataStorage.TasksStorage;
tasksStorage.Mappings.Name.MappingName = "Name";
tasksStorage.Mappings.Start.MappingName = "Start";
tasksStorage.Mappings.Duration.MappingName = "Duration";
tasksStorage.Mappings.Initialized.MappingName = "Initialized";
/*以下マッピングのは、GanttViewの複数のカスタムフィールド列をDataTableの単一の列にマップします。
GanttViewの各カスタムフィールド列の値は、XML形式の文字列として、DataTableのその単一の列に保存されます*/
tasksStorage.Mappings.CustomFields.MappingName = "CommonCustomField";
//DataTableの値をデータソースに設定
tasksStorage.DataSource = GetTasksTable(5);
}
///
/// DataTableの設定
///
private DataTable GetTasksTable(int numberOfTasks)
{
DataTable dt = new DataTable();
dt.BeginLoadData();
dt.Columns.Add("Name", typeof(string));
dt.Columns.Add("Start", typeof(DateTime));
dt.Columns.Add("Duration", typeof(double));
dt.Columns.Add("Initialized", typeof(bool));
//2つののカスタムフィールド列を追加
dt.Columns.Add("CustomField1", typeof(string));
dt.Columns.Add("CustomField2", typeof(string));
//結合用共通カスタムフィールド列を追加
dt.Columns.Add("CommonCustomField", typeof(string));
//"CommonCustomField"列の値をXML形式で設定
Random rnd = new Random();
for (int i = 1; i <= numberOfTasks; i++)
{
dt.Rows.Add($"task {i}", DateTime.Today.AddDays(rnd.Next(-10, 10)), rnd.Next(1, 10), true, "Custom Value 1", "Custom Value 2", string.Format(XML_FORMAT, "Custom Value 1", "Custom Value 2"));
}
dt.EndLoadData();
return dt;
}
}
}