作成日: 2022/08/08 最終更新日: 2022/08/08
文書種別
使用方法
詳細
メインレポートおよびサブレポートのデータソースとして、CSVファイルに直接バインドして利用することはできないため、CSVファイルのデータを読み込んだ後そのデータをDataTableに設定し、このDataTableをDataSourceとして指定する方法を紹介します。
CSVファイルをDataTableに変換するには、最初にCSVファイルをStreamReaderにロードしたのち、ReadLineで1行読み込み、これをDataTableの行へ設定します。
この一連の処理を関数の形にまとめたサンプルコードを以下に紹介します。
※事前に、以下のデータを設定した2つのCSVファイルを作成しておいてください。
(TestDataMain.csv)
1, Fruits, Fruit Sample
2, Animals, Animal Sample
3, Vagetable, Vagetable Sample
(TestDataSub.csv)
1, Banana, 1, 235
2, Dog, 2, 235
3, Lemon, 3, 247
4, Mango, 1, 8599
5, Cucumbar, 3, 6809
7, Horse, 2, 25
8, Capsicum, 3, 2534
9, Guava, 1, 865
10, Goat, 2, 233
11, Chilley, 3, 452
12, Cheery, 1, 63853
13, Cow, 2, 356736
14, Donkey, 2, 3456
15, Watermelon, 1, 3452
◎サンプルコード(VB)
この関数を用いてメイン用/サブ用の2種類のDataTableを生成し、既存のメインレポート/サブレポートのデータソースとして利用する詳細な手順については、以下のナレッジをご参照ください。
◇ナレッジベース
[FlexReport for WinForms] サブレポートを含むレポートのデータソースとしてDataTableを設定する方法
※このナレッジのGetMainDataTable/GetSubDataTable関数では、DataTableをコードで生成しています。
この関数を上記関数に置き換えて、ナレッジ記載の手順に従って設定を行ってください。
CSVファイルをDataTableに変換するには、最初にCSVファイルをStreamReaderにロードしたのち、ReadLineで1行読み込み、これをDataTableの行へ設定します。
この一連の処理を関数の形にまとめたサンプルコードを以下に紹介します。
※事前に、以下のデータを設定した2つのCSVファイルを作成しておいてください。
(TestDataMain.csv)
1, Fruits, Fruit Sample
2, Animals, Animal Sample
3, Vagetable, Vagetable Sample
(TestDataSub.csv)
1, Banana, 1, 235
2, Dog, 2, 235
3, Lemon, 3, 247
4, Mango, 1, 8599
5, Cucumbar, 3, 6809
7, Horse, 2, 25
8, Capsicum, 3, 2534
9, Guava, 1, 865
10, Goat, 2, 233
11, Chilley, 3, 452
12, Cheery, 1, 63853
13, Cow, 2, 356736
14, Donkey, 2, 3456
15, Watermelon, 1, 3452
◎サンプルコード(VB)
Private Function GetMainDataTable() As DataTable
' csvファイルのデータをStreamReaderに読み込み
Dim csv_file As System.IO.StreamReader = File.OpenText("..\..\TestDataMain.csv")
' データテーブルを設定
Dim dtMain As DataTable = New DataTable()
dtMain.Columns.Add("CategoryID", GetType(Int32))
dtMain.Columns.Add("CategoryName", GetType(String))
dtMain.Columns.Add("Description", GetType(String))
' 値をデータテーブルの行に割り当て
While csv_file.Peek() >= 0
' StreamReaderから1行読み込み
Dim line As String = csv_file.ReadLine()
' コンマでデータを分割
Dim vals As String() = line.Split(","c)
' 各データをデータテーブルの各列に割り当て
Dim dr As DataRow = dtMain.NewRow()
dr("CategoryID") = vals(0)
dr("CategoryName") = vals(1)
dr("Description") = vals(2)
dtMain.Rows.Add(dr)
End While
' 作成したDataTableを戻す
dtMain.AcceptChanges()
csv_file.Close()
Return dtMain
End Function
Private Function GetSubDataTable() As DataTable
' csvファイルのデータをStreamReaderにロード
Dim csv_file As System.IO.StreamReader = File.OpenText("..\..\TestDataSub.csv")
' データテーブルを設定
Dim dtSub As DataTable = New DataTable()
dtSub.Columns.Add("ProductID", GetType(Int32))
dtSub.Columns.Add("ProductName", GetType(String))
dtSub.Columns.Add("CategoryID", GetType(Int32))
dtSub.Columns.Add("Cost", GetType(Int32))
' 値をデータテーブルの行に割り当て
While csv_file.Peek() >= 0
' StreamReaderから1行読み込み
Dim line As String = csv_file.ReadLine()
' コンマでデータを分割
Dim vals As String() = line.Split(","c)
' 各データをデータテーブルの各列に割り当て
Dim dr As DataRow = dtSub.NewRow()
dr("ProductID") = vals(0)
dr("ProductName") = vals(1)
dr("CategoryID") = vals(2)
dr("Cost") = vals(3)
dtSub.Rows.Add(dr)
End While
dtSub.AcceptChanges()
csv_file.Close()
' 作成したDataTableを戻す
Return dtSub
End Function
◎サンプルコード(C#)
DataTable GetMainDataTable()
{
// csvファイルのデータをStreamReaderに読み込み
System.IO.StreamReader csv_file = File.OpenText("..\\..\\TestDataMain.csv");
// データテーブルを設定
DataTable dtMain = new DataTable();
dtMain.Columns.Add("CategoryID", typeof(Int32));
dtMain.Columns.Add("CategoryName", typeof(String));
dtMain.Columns.Add("Description", typeof(String));
// 値をデータテーブルの行に割り当て
while (csv_file.Peek() >= 0)
{
// StreamReaderから1行読み込み
string line = csv_file.ReadLine();
// コンマでデータを分割
string[] vals = line.Split(',');
// 各データをデータテーブルの各列に割り当て
DataRow dr = dtMain.NewRow();
dr["CategoryID"] = vals[0];
dr["CategoryName"] = vals[1];
dr["Description"] = vals[2];
dtMain.Rows.Add(dr);
}
dtMain.AcceptChanges();
csv_file.Close();
// 作成したDataTableを戻す
return dtMain;
}
DataTable GetSubDataTable()
{
// csvファイルのデータをStreamReaderにロード
System.IO.StreamReader csv_file = File.OpenText("..\\..\\TestDataSub.csv");
// データテーブルを設定
DataTable dtSub = new DataTable();
dtSub.Columns.Add("ProductID",typeof(Int32));
dtSub.Columns.Add("ProductName", typeof(String));
dtSub.Columns.Add("CategoryID", typeof(Int32));
dtSub.Columns.Add("Cost", typeof(Int32));
// 値をデータテーブルの行に割り当て
while (csv_file.Peek() >= 0)
{
// StreamReaderから1行読み込み
string line = csv_file.ReadLine();
// コンマでデータを分割
string[] vals = line.Split(',');
// 各データをデータテーブルの各列に割り当て
DataRow dr = dtSub.NewRow();
dr["ProductID"] = vals[0];
dr["ProductName"] = vals[1];
dr["CategoryID"] = vals[2];
dr["Cost"] = vals[3];
dtSub.Rows.Add(dr);
}
dtSub.AcceptChanges();
csv_file.Close();
// 作成したDataTableを戻す
return dtSub;
}
この関数を用いてメイン用/サブ用の2種類のDataTableを生成し、既存のメインレポート/サブレポートのデータソースとして利用する詳細な手順については、以下のナレッジをご参照ください。
◇ナレッジベース
[FlexReport for WinForms] サブレポートを含むレポートのデータソースとしてDataTableを設定する方法
※このナレッジのGetMainDataTable/GetSubDataTable関数では、DataTableをコードで生成しています。
この関数を上記関数に置き換えて、ナレッジ記載の手順に従って設定を行ってください。