このトピックでは、実行時にテンプレートフィールドを C1GridView に連結する方法について説明します。
この例では、C1Nwind.mdb データベースの Customers テーブルに C1GridView コントロールが連結され、C1ComboBox を含む C1TemplateField に Country フィールドがアタッチされます。
次の手順を実行します。
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 イベントを処理します。
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; } |
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(); } |