グリッドビューで指定した列を編集する方法
GridView内の特定列を編集する場合は、以下の手順を実行する必要があります。
- GridViewでAutoGenerateEditButton属性をtrueにすると、編集ボタンが表示されます。
- GridView に TemplateField 列を定義します。TemplateField では TextBox などのコントロールを使用して、指定の列のデータを編集できます。
- GridViewのRowEditingイベントで、編集する行のインデックスはe.NewEditIndexプロパティで取得します。
- GridViewのRowDataBoundイベントで、行インデックスから指定した列のコントロールを取得し、編集可能状態にする。
以下にサンプルコードを示します。
<asp:GridView ID="GridView1" runat="server" AutoGenerateEditButton="true" OnRowEditing="GridView1_RowEditing" OnRowDataBound="GridView1_RowDataBound">
<Columns>
<asp:TemplateField HeaderText="列1">
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Eval("Column1") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="TextBox1" runat="server" Text='<%# Eval("Column1") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="列2">
<ItemTemplate>
<asp:Label ID="Label2" runat="server" Text='<%# Eval("Column2") %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="TextBox2" runat="server" Text='<%# Eval("Column2") %>'></asp:TextBox>
</EditItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
{
GridView1.EditIndex = e.NewEditIndex;
GridView1.DataBind();
}
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.DataRow && GridView1.EditIndex == e.Row.RowIndex)
{
TextBox textBox1 = (TextBox)e.Row.FindControl("TextBox1");
TextBox textBox2 = (TextBox)e.Row.FindControl("TextBox2");
textBox1.Enabled = true; // 设置为可编辑状态
textBox2.Enabled = true; // 设置为可编辑状态
}
}
このサンプルでは、GridView の編集ボタンをクリックすると、指定した行の編集モードに切り替わり、GridView1_RowEditing イベントがトリガーされます。GridView1_RowDataBound イベントで、行インデックスに基づいて指定された列の TextBox コントロールを検索し、編集可能状態に設定します。