作成日: 2018/12/04 最終更新日: 2024/11/05
文書種別
使用方法
詳細
C1GanttViewでは、タスク名や開始日などの組込みフィールドのほか、独自のカスタムフィールド列を追加して、データソースのデータを表示させることができます。
これを行うには、まずCustomFieldColumnクラスのインスタンスをC1GanttViewの列に追加します。
次いで、データソースのベースとなるDBやDataTableなどに「カスタムフィールド」(例:"CustomFields"列)を用意し、データを設定します。
※カスタムフィールド列のデータは、以下のようなXML形式で設定します。
最後に、GanttViewとデータソースのフィールド間のマッピングを指定するため、C1GanttViewのDataStorage.TasksStorage.Mappings.CustomFieldsプロパティを、データソースのカスタムフィールド名に設定します。
以下に、この動作を実装するコードの例を記載します。

◎サンプルコード(VB)
(更新履歴)
2024/11/05:説明文を修正し、GetDataTable関数のコードを追加
これを行うには、まずCustomFieldColumnクラスのインスタンスをC1GanttViewの列に追加します。
次いで、データソースのベースとなるDBやDataTableなどに「カスタムフィールド」(例:"CustomFields"列)を用意し、データを設定します。
※カスタムフィールド列のデータは、以下のようなXML形式で設定します。
<?xml version="1.0" encoding="utf-16"?><fieldValues><fieldValue key = "CustomFields" valueType="System.String" value="AAAA"/></fieldValues>
最後に、GanttViewとデータソースのフィールド間のマッピングを指定するため、C1GanttViewのDataStorage.TasksStorage.Mappings.CustomFieldsプロパティを、データソースのカスタムフィールド名に設定します。
以下に、この動作を実装するコードの例を記載します。
◎サンプルコード(VB)
Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
' カスタムフィールド列の追加
Dim customCol As C1.Win.C1GanttView.CustomFieldColumn = New C1.Win.C1GanttView.CustomFieldColumn()
customCol.Caption = "カスタム列"
customCol.DataType = GetType(String)
customCol.Name = "Assignee"
customCol.Visible = True
C1GanttView1.Columns.Add(customCol)
' データの設定
Dim table As DataTable = GetDataTable()
' マッピングの設定
C1GanttView1.DataStorage.TasksStorage.Mappings.TaskID.MappingName = "TaskID"
C1GanttView1.DataStorage.TasksStorage.Mappings.Initialized.MappingName = "Initialized"
C1GanttView1.DataStorage.TasksStorage.Mappings.Name.MappingName = "Name"
C1GanttView1.DataStorage.TasksStorage.Mappings.Start.MappingName = "Start"
C1GanttView1.DataStorage.TasksStorage.Mappings.Finish.MappingName = "Finish"
C1GanttView1.DataStorage.TasksStorage.Mappings.CustomFields.MappingName = "CustomFields"
' データソースの設定
C1GanttView1.DataStorage.TasksStorage.DataSource = table
End Sub
Private Function GetDataTable() As DataTable
Dim table = New DataTable()
table.Columns.Add("Name", GetType(String))
table.Columns.Add("Start", GetType(Date))
table.Columns.Add("Finish", GetType(Date))
table.Columns.Add("CustomFields", GetType(String))
table.Columns.Add("Initialized", GetType(Boolean))
table.Columns("Initialized").DefaultValue = True
table.Columns.Add("TaskID", GetType(Integer))
table.Columns("TaskID").AutoIncrement = True
Dim names = New String() {"Lan", "Mat", "Rand", "Perrin", "Thom"}
Dim random = New Random()
For i = 1 To 20
Dim start = New Date(2018, 11, random.Next(1, 31))
Dim finish = start.AddDays(random.Next(2, 5))
table.Rows.Add($"Task #{i}", start, finish, String.Format("<fieldValues> <fieldValue key=""Assignee"" valueType=""System.String"" value=""{0}"" /> </fieldValues>", names.ElementAt(random.Next(0, names.Count))))
Next
Return table
End Function
◎サンプルコード(C#)
private void Form1_Load(object sender, EventArgs e)
{
// カスタムフィールド列の追加
var customCol = new C1.Win.C1GanttView.CustomFieldColumn();
customCol.Caption = "カスタム列";
customCol.DataType = typeof(string);
customCol.Name = "Assignee";
customCol.Visible = true;
c1GanttView1.Columns.Add(customCol);
// データの設定
DataTable table = GetDataTable();
// マッピングの設定
c1GanttView1.DataStorage.TasksStorage.Mappings.TaskID.MappingName = "TaskID";
c1GanttView1.DataStorage.TasksStorage.Mappings.Initialized.MappingName = "Initialized";
c1GanttView1.DataStorage.TasksStorage.Mappings.Name.MappingName = "Name";
c1GanttView1.DataStorage.TasksStorage.Mappings.Start.MappingName = "Start";
c1GanttView1.DataStorage.TasksStorage.Mappings.Finish.MappingName = "Finish";
c1GanttView1.DataStorage.TasksStorage.Mappings.CustomFields.MappingName = "CustomFields";
// データソースの設定
c1GanttView1.DataStorage.TasksStorage.DataSource = table;
}
private DataTable GetDataTable()
{
var table = new DataTable();
table.Columns.Add("Name", typeof(string));
table.Columns.Add("Start", typeof(DateTime));
table.Columns.Add("Finish", typeof(DateTime));
table.Columns.Add("CustomFields", typeof(string));
table.Columns.Add("Initialized", typeof(bool));
table.Columns["Initialized"].DefaultValue = true;
table.Columns.Add("TaskID", typeof(int));
table.Columns["TaskID"].AutoIncrement = true;
string[] names = new string[] { "Lan", "Mat", "Rand", "Perrin", "Thom" };
var random = new Random();
for (int i = 1; i <= 20; i++)
{
var start = new DateTime(2018, 11, random.Next(1, 31));
var finish = start.AddDays(random.Next(2, 5));
table.Rows.Add($"Task #{i}", start, finish, string.Format("<fieldValues> <fieldValue key=\"Assignee\" valueType=\"System.String\" value=\"{0}\" /> </fieldValues>", names.ElementAt(random.Next(0, names.Count()))));
}
return table;
}
(更新履歴)
2024/11/05:説明文を修正し、GetDataTable関数のコードを追加
関連情報
旧文書番号
83440