FlexGrid for WinForms
ロード
保存、ロード、印刷 > ロード

FlexGrid では、グリッドをさまざまな形式に保存できるだけでなく、テキスト、Excel、XML、データベースなどのさまざまな形式からデータをロードできます。この機能は、C1.Win.C1FlexGrid.ImportExport.dll という名前のアセンブリを通じて有効になります。したがって、これらのソースからグリッドにデータをロードするには、このアセンブリへの参照を追加する必要があります。

テキストファイルからのロード

テキストファイルからデータをロードするために、FlexGrid には Extensions クラスの LoadGrid メソッドが用意されています。このメソッドには、区切り文字やエンコードなどを選択するためのパラメータがあります。SaveGrid メソッドを使用して保存されたテキストファイルをロードすることもできます。 テキストファイルをロードすると、ファイルの内容に合わせて、必要に応じて行と列がグリッドに追加されます。 このメソッドは、カンマ区切りテキストファイル (CSV 形式)、タブ区切りテキストファイルなどの形式のほか、MS Excel ファイル(.xls)もサポートしています。

次のコードは、テキストファイルからデータをロードして WinForms FlexGrid に挿入する方法を示します。

private void btnLoadTxt_Click(object sender, EventArgs e)
{
    c1FlexGrid1.LoadGrid("../.../ExportedGrid.txt", FileFormatEnum.TextComma );
}
Private Sub btnLoadTxt_Click(ByVal sender As Object, ByVal e As EventArgs)
    c1FlexGrid1.LoadGrid("../.../ExportedGrid.txt", FileFormatEnum.TextComma)
End Sub

Excel ファイルからのロード

Excel ファイルからグリッドをロードするには、前述の LoadGrid メソッドを使用し、FileFormatEnum.Excel に書式パラメータを設定します。コンピュータに Microsoft Excel をインストールしておく必要はありません。ただし、LoadGrid メソッドは、ワークブックの最初のワークシートからしかデータをロードできません。

Excel ファイルからデータをロードする際に、さらに詳細な制御を行うには、代わりに LoadExcel メソッドを使用します。このメソッドで Excel ファイルをロードすると、行や列のサイズ、フォント、色、書式、セルの配置など、ほとんどのデータ型と書式設定情報が変換されます。ただし、いくつかの例外はあります。たとえば、グリッドは Excel のセル内の値をロードしますが、その基になる式をロードすることはできません。ほかにも、固定セル、結合セル、画像、データマップ、セル境界線などの機能も変換されません。

Excel ファイルから WinForms FlexGrid にコンテンツをロードするには、次のコードを使用します。

private void btnLoadExcl_Click(object sender, EventArgs e)
{
    c1FlexGrid1.LoadExcel("../.../ExportedGrid.xlsx");
}
Private Sub btnLoadExcl_Click(ByVal sender As Object, ByVal e As EventArgs)
    c1FlexGrid1.LoadExcel("../.../ExportedGrid.xlsx")
End Sub

データベースからのロード

データベースからグリッドデータをロードするには、DataReader オブジェクトを使用します。このプロセスはデータ連結とは異なります。つまり、1 つ以上のコントロールと基底のデータソースの間に有効な接続は維持されません。

次のコードは、データベースから WinForms FlexGrid にコンテンツをロードする方法を示しています。

private void btnLoadDB_Click(object sender, EventArgs e)
{
       
    {
        // DataReaderを準備します。
        string strConn = "data source=MYMACHINE;initial catalog=Northwind;";
        System.Data.SqlClient.SqlConnection myConn = new System.Data.SqlClient.SqlConnection(strConn);
        System.Data.SqlClient.SqlCommand myCMD = new System.Data.SqlClient.SqlCommand("SELECT * FROM Employees", myConn);
        myConn.Open();
        System.Data.SqlClient.SqlDataReader myReader = myCMD.ExecuteReader();

        // DBスキーマからグリッド構造を構築します。
        DataTable dt = myReader.GetSchemaTable();
       c1FlexGrid1.Cols.Count = 1;
        foreach (DataRow dr in dt.Rows)
        {
            Column c =c1FlexGrid1.Cols.Add();
            c.Caption = c.Name = (string)dr["ColumnName"];
            c.DataType = (Type)dr["DataType"];
        }

        // グリッドにデータを入力します。
       c1FlexGrid1.Rows.Count = 1;
        int row = 1;
        int cols = dt.Columns.Count;
        object[] v = (object[])Array.CreateInstance(typeof(object), cols);
        while (myReader.Read())
        {
            myReader.GetValues(v);
           c1FlexGrid1.AddItem(v, row++, 1);
        }

        // クリーンアップします。
       c1FlexGrid1.AutoSizeCols();
        myReader.Close();
        myConn.Close();
    }
}
Private Sub btnLoadDB_Click(ByVal sender As Object, ByVal e As EventArgs)
 
    '  DataReaderを準備します。
    Dim strConn As String = "data source=MYMACHINE;initial catalog=Northwind;"
    Dim myConn As New SqlClient.SqlConnection(strConn)
    Dim myCMD As New SqlClient.SqlCommand("SELECT * FROM Employees", myConn)
    myConn.Open()
    Dim myReader As SqlClient.SqlDataReader = myCMD.ExecuteReader()
 
    ' DBスキーマからグリッド構造を構築します。
    Dim dt As DataTable = myReader.GetSchemaTable()
    _flex.Cols.Count = 1
    Dim dr As DataRow
    For Each dr In  dt.Rows
        Dim c As C1.Win.C1FlexGrid.Column = _flex.Cols.Add()
        c.Caption =(c.Name <= CStr(dr("ColumnName")))
        c.DataType = CType(dr("DataType"), Type)
    Next dr
 
    '  グリッドにデータを入力します。
    _flex.Rows.Count = 1
    Dim row As Integer = 1
    Dim cols As Integer = dt.Columns.Count
    Dim v As Object() = CType(Array.CreateInstance(GetType(Object), cols), Object())
    While myReader.Read()
        myReader.GetValues(v)
        _flex.AddItem(v, row + 1, 1)
    End While
 
    '  クリーンアップします。
    _flex.AutoSizeCols()
    myReader.Close()
    myConn.Close()
End Sub

XML からロード

グリッドのコンテンツを XML ドキュメントからシリアライズ解除するには、C1FlexGrid クラスの ReadXML メソッドを呼び出し、XML ドキュメントのパスをパラメータとして渡します。

 XML ドキュメントから WinForms FlexGrid にコンテンツをロードするには、次のコードを使用します。

private void btnLoadXML_Click(object sender, EventArgs e)
{
    c1FlexGrid1.ReadXml("../.../ExportedGrid.xml");
}
Private Sub btnLoadXML_Click(ByVal sender As Object, ByVal e As EventArgs)
    c1FlexGrid1.ReadXml("../.../ExportedGrid.xml")
End Sub
関連トピック