Copyright © GrapeCity inc. All rights reserved.
True DBGrid for WinForms
チュートリアル6: 連結グリッド内で非連結列を定義する
チュートリアル > チュートリアル6: 連結グリッド内で非連結列を定義する

このチュートリアルでは、UnboundColumnFetch イベントを使用して、1つの列に2つのフィールド( FirstNameLastName )を一緒に表示する方法を学びます。また、SQL 文を使用して、データベース内の2つのテーブルを結合する方法を学びます。このチュートリアルでセットアップしたプロジェクトは、チュートリアル 7〜12 でも使用します。.

以下の手順を実行します。

  1. 新しい .NET プロジェクトを開始します。
  2. IDE の左側のツールボックスから、フォームにC1TrueDBGrid オブジェクトを配置します。
  3. C1TrueDBGrid タスクメニューで、データソースの選択 ドロップダウン矢印をクリックし、ドロップダウンボックスから プロジェクトのデータソースの追加リンクを選択します。データソース構成ウィザードが表示されます。データソースの種類の選択]ページ上で選択されているデフォルト設定である[データベース]をそのままにして、〈次へ〉をクリックします。〈新しい接続〉ボタンをクリックし、新しい接続を作成するか、ドロップダウンリストから1つ選択します。[データベースオブジェクトの選択]ページで、Contacts テーブルを選択し、すべてのフィールドを含めます。[データセット名]ボックスに DsContacts と入力し、〈完了〉をクリックしてウィザードを終了します。新しいデータソースをプロジェクトに追加する方法については、「手順 2:DataSet への C1TrueDBGrid の連結」を参照してください。
  4. デザイナで DsContacts.xsd を編集するには、ソリューションエクスプローラでファイルをダブルクリックします。Contacts テーブルを右クリックし、コンテキストメニューから[構成]を選択します。
  5. テーブルアダプタ設定ウィザードで、SQL 文字列を
    SELECT Customers.FirstName, Customers.LastName, Customers.CustType, Contacts.ContactType, Contacts.Callback, Contacts.ContactDate, Contacts.UserCode, Customers.UserCode AS Expr1 FROM Contacts INNER JOIN Customers ON Contacts.UserCode = Customers.UserCodeに変更します。
  6. Contactsテーブルは、Customers テーブルに結合されました。[完了]をクリックしてウィザードを終了します。
  7. デザインビューに戻ります。既存の列のレイアウトを置き換えるかどうかを確認するプロンプトが表示された場合は、[はい]をクリックします。
    メモ: C1TrueDBGridにすべての列が表示されない場合は、データソースを ’なし’ に設定して、もう一度、ドロップダウンメニューから[DataSource]を選択してください。
  8. Form1に新しいglobal DataTable オブジェクトを宣言します。

    Visual Basic コードの書き方

    Visual Basic
    コードのコピー
    Dim dtCopy As New DataTable
    

    C# コードの書き方

    C#
    コードのコピー
    DataTable dtCopy = new DataTable;
    
  9. Form_Loadイベントに次のコードを追加します。1行目は、データセットにデータを挿入します。2行目は、このデータセットのコピーを作成します。これを後で使用して、非連結列にデータを挿入します。

    Visual Basic コードの書き方

    Visual Basic
    コードのコピー
    Me.ContactsTableAdapter.Fill(Me.DsContacts.Contacts)
    dtCopy = Me.DsContacts.Tables(0).Copy()
    

    C# コードの書き方

    C#
    コードのコピー
    this.ContactsTableAdapter.Fill(this.DsContacts.Contacts);
    dtCopy = this.DsContacts.Tables(0).Copy();
    
  10. 非連結列を作成するには、プロパティウィンドウで、Columns プロパティの横にある省略符ボタンをクリックして、C1TrueDBGrid デザイナを開きます。次に、〈列を挿入〉ボタンをクリックして列を作成し、Caption プロパティを Name に設定します。Caption フィールドには値があるが、DataField には値がないことに注意してください。これで、C1TDBGrid はこの列を非連結列であると認識し、UnboundColumnFetch イベントを発生させます。
  11. Visual Studio のプロパティウィンドウで Splits プロパティの横にある省略符ボタンをクリックして、SplitCollection エディタを開きます。DisplayColumns プロパティの横にある省略符ボタンをクリックして、C1DisplayColumnCollection エディタを開きます。このエディタで、作成した非連結列を見つけ、Visible プロパティを True に設定します。これで、この非連結列は、True DBGrid for WinForms コントロールだけにではなく、エンドユーザーにも表示されるようになります。非連結列で特定の列を非表示に設定できます。左ペインで FirstName 列を選択し、右ペインにある Visible プロパティを False に設定します。これで、FirstName 列は表示されません。LastName 列を選択し、同じ動作を繰り返します。
  12. UnboundColumnFetchイベントに次のコードを追加します。このコードは、dtCopy を使用して e.Value に設定されている値を収集し、それらを非連結列に配置します。

    Visual Basic コードの書き方

    Visual Basic
    コードのコピー
    Private Sub C1TrueDBGrid1_UnboundColumnFetch(ByVal sender As System.Object, ByVal e As C1.Win.C1TrueDBGrid.UnboundColumnFetchEventArgs) Handles C1TrueDBGrid1.UnboundColumnFetch
        If e.Column.Caption = "Name" AndAlso e.Row < dtCopy.Rows.Count Then 
            e.Value = Me.C1TrueDBGrid1(e.Row, "FirstName").ToString + " " + Me.C1TrueDBGrid1(e.Row, "LastName").ToString 
        End If
    End Sub
    

    C# コードの書き方

    C#
    コードのコピー
    private void c1TrueDBGrid1_UnboundColumnFetch(object sender,  C1.Win.C1TrueDBGrid.UnboundColumnFetchEventArgs e)  
    {
        if(e.Column.Caption == "Name" && e.Row < dtCopy.Rows.Count) 
        {
            e.Value = this.c1TrueDBGrid1[e.Row, "FirstName"].ToString()+ " " + this.c1TrueDBGrid1[e.Row, "LastName"].ToString();
        }
    }
    

プログラムを実行し、次の動作を確認します。

アプリケーションを実行すると、次のように表示されます。

これでチュートリアル 6 は終了です。