GridView for ASP.NET Web Forms
テンプレートフィールドの実行時データ連結
タスク別ヘルプ > データソースへのグリッドの連結 > テンプレートフィールドの実行時データ連結

このトピックでは、実行時にテンプレートフィールドを C1GridView に連結する方法について説明します。

この例では、C1Nwind.mdb データベースの Customers テーブルに C1GridView コントロールが連結され、C1ComboBox を含む C1TemplateField に Country フィールドがアタッチされます。

デザイナの場合

次の手順を実行します。

  1. C1GridView コントロールを右クリックし、コンテキストメニューから[スマートタグの表示]選択して、コントロールを C1Nwind.mdb データベースに連結します。このデータベースは、デフォルトでは samples ディレクトリに置かれています。詳細な手順については、「手順1/3:データソースへの C1GridView の連結」を参照してください。
  2. テンプレートフィールドを Country フィールド列に追加し、C1ComboBox をエディタドキュメントの ItemTemplate セクションに追加します。詳細な手順については、「列へのコントロールの追加」を参照してください。

ソースビューの場合

C1GridView に Template 列を追加するには、<cc1:C1GridView ></cc1:C1GridView > タグを次のように変更します。

<cc1:C1GridView ID="C1GridView1" runat="server" AutogenerateColumns="False" DataKeyNames="CustomerID" DataSourceID="SqlDataSource1">
            <Columns>
                <cc1:C1BoundField DataField="CustomerID" HeaderText="CustomerID" ReadOnly="True" SortExpression="CustomerID">
                </cc1:C1BoundField>
                <cc1:C1BoundField DataField="CustomerName" HeaderText="CustomerName" SortExpression="CustomerName">
                </cc1:C1BoundField>
                  <cc1:C1TemplateField HeaderText="Country">
                <ItemTemplate>
                    <span>
                        <%# Eval("Country") %></span>
                </ItemTemplate>
                <EditItemTemplate>
                   <cc1:C1ComboBox ID="dlCountry" runat="server">
                   </cc1:C1ComboBox>
                 </EditItemTemplate>
            </cc1:C1TemplateField>
            <cc1:C1CommandField ShowEditButton="True">
            </cc1:C1CommandField>
        </Columns>
           
        </cc1:C1GridView>

コードの場合

各行で C1ComboBox を連結するには、次のコードを追加して RowDataBound イベントを処理します。

  1. Visual Basic でコードを書く場合

    Visual Basic
    コードのコピー
     Protected Sub C1GridView1_RowDataBound(sender As Object, e As C1.Web.Wijmo.Controls.C1GridView.C1GridViewRowEventArgs) Handles C1GridView1.RowDataBound
            If (e.Row.RowState And C1GridViewRowState.Edit) > 0 Then
                ' 基底のデータ項目を取得します。この例では、
                ' 基底のデータ項目は DataRowView オブジェクトです。
                Dim rowView As DataRowView = DirectCast(e.Row.DataItem, DataRowView)
                ' 現在の行の country 値を取得します。
                Dim country As [String] = rowView("Country").ToString()
                ' 現在の行から DropDownList コントロールを取得し、それをデータ連結します。
                Dim dlCountry As C1ComboBox = DirectCast(e.Row.FindControl("dlCountry"), C1ComboBox)
                dlCountry.DataSource = GetData()
                dlCountry.DataTextField = "Country"
                dlCountry.DataValueField = "Country"
                dlCountry.DataBind()
                'ドロップダウンの項目を取得し、選択項目として設定します。
                For Each item As C1ComboBoxItem In dlCountry.Items
                    If item.Text = country Then
                        dlCountry.SelectedValue = item.Text
                    End If
                Next
            End If
        End Sub
        Protected Function GetData() As DataTable
            Dim con As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + Server.MapPath("~/App_Data/C1NWind1.mdb"))
            Dim cmd As New OleDbCommand("Select Country from Countries", con)
            Dim da As New OleDbDataAdapter(cmd)
            Dim dt As New DataTable()
            da.Fill(dt)
            Return dt
        End Function
    

    C# でコードを書く場合

    C#
    コードのコピー
    protected void C1GridView1_RowDataBound(object sender, C1.Web.Wijmo.Controls.C1GridView.C1GridViewRowEventArgs e)
        {
            if ((e.Row.RowState & C1GridViewRowState.Edit)>0) {
                // 基底のデータ項目を取得します。この例では、
                // 基底のデータ項目は DataRowView オブジェクトです。
                DataRowView rowView = (DataRowView)e.Row.DataItem;
                // 現在の行の country 値を取得します。
                String country = rowView["Country"].ToString();
                // 現在の行から DropDownList コントロールを取得し、それをデータ連結します。
             
                C1ComboBox dlCountry = (C1ComboBox)e.Row.FindControl("dlCountry");
                dlCountry.DataSource = GetData();
                dlCountry.DataTextField = "Country";
                dlCountry.DataValueField = "Country";
                dlCountry.DataBind();
              
                //ドロップダウンの項目を取得し、選択項目として設定します。
             
                foreach (C1ComboBoxItem item in dlCountry.Items) {
                    if (item.Text == country) {
                        dlCountry.SelectedValue = item.Text;
                    }
                }
             }
          }
        DataTable GetData() {
            OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source="+Server.MapPath("~/App_Data/C1NWind1.mdb"));
            OleDbCommand cmd = new OleDbCommand("Select Country from Countries",con);
            OleDbDataAdapter da = new OleDbDataAdapter(cmd);
            DataTable dt = new DataTable();
            da.Fill(dt);
            return dt;
        }
    
  2. Update コマンドにパラメータとして C1ComboBox の SelectedValue を提供するには、次のコードを追加して RowUpdating イベントを処理します。

    Visual Basic でコードを書く場合

    Visual Basic
    コードのコピー
     Protected Sub C1GridView1_RowUpdating(sender As Object, e As C1.Web.Wijmo.Controls.C1GridView.C1GridViewUpdateEventArgs) Handles C1GridView1.RowUpdating
            ' 編集中の行を取得します。
            Dim row As C1GridViewRow = C1GridView1.Rows(C1GridView1.EditIndex)
            ' 行から DropDownList コントロールを取得します。
            Dim combo As C1ComboBox = DirectCast(row.FindControl("dlCountry"), C1ComboBox)
            ' DropDownList コントロールの選択された値を
            ' NewValues コレクションに追加します。NewValues コレクションは、
            ' データソースコントロールに渡され、このコントロールが
            ' データソースを更新します。
            e.NewValues("Country") = combo.SelectedValue
            SqlDataSource1.UpdateCommand = "Update Customers Set CustomerName=@CustomerName, Country=@Country where CustomerID=@CustomerID"
            SqlDataSource1.UpdateParameters.Add("CustomerID", e.Keys("CustomerID").ToString())
            SqlDataSource1.UpdateParameters.Add("CustomerName", e.NewValues("CustomerName").ToString())
            SqlDataSource1.UpdateParameters.Add("Country", e.NewValues("Country").ToString())
            SqlDataSource1.Update()
        End Sub
                       
    

    C# でコードを書く場合

    C#
    コードのコピー
     protected void C1GridView1_RowUpdating(object sender, C1.Web.Wijmo.Controls.C1GridView.C1GridViewUpdateEventArgs e)
        {
            // 編集中の行を取得します。
            C1GridViewRow row = C1GridView1.Rows[C1GridView1.EditIndex];
            // 行から DropDownList コントロールを取得します。
          
            C1ComboBox combo = (C1ComboBox)row.FindControl("dlCountry");
            // DropDownList コントロールの選択された値を
            // NewValues コレクションに追加します。NewValues コレクションは、
            // データソースコントロールに渡され、このコントロールが
            // データソースを更新します。
          
            e.NewValues["Country"] = combo.SelectedValue;
            SqlDataSource1.UpdateCommand = "Update Customers Set CustomerName=@CustomerName, Country=@Country where CustomerID=@CustomerID";
            SqlDataSource1.UpdateParameters.Add("CustomerID", e.Keys["CustomerID"].ToString());
            SqlDataSource1.UpdateParameters.Add("CustomerName", e.NewValues["CustomerName"].ToString());
            SqlDataSource1.UpdateParameters.Add("Country", e.NewValues["Country"].ToString());
            SqlDataSource1.Update();
        }
                       
    
関連トピック