次のマークアップを含む GridView コントロールがあります。
<asp:GridView ID="gvGroups" runat="server" Width="100%" AutoGenerateColumns="False"
ShowFooter="True" BorderColor="White" BorderStyle="Ridge" CellSpacing="1" BorderWidth="2px"
BackColor="White" CellPadding="3" GridLines="None" Font-Names="Tahoma" Font-Size="11px"
DataKeyNames="GroupId" OnRowDeleting="gvGroups_RowDeleting">
<FooterStyle BackColor="#C6C3C6" ForeColor="Black" />
<RowStyle BackColor="#DEDFDE" ForeColor="Black" />
<HeaderStyle BackColor="#4A3C8C" Font-Bold="True" ForeColor="#E7E7FF" />
<Columns>
<asp:TemplateField HeaderText="Row">
<ItemTemplate>
<asp:Literal ID="litRowNumberNormal" runat="server"></asp:Literal>
</ItemTemplate>
<FooterTemplate>
<asp:Literal ID="litRowNumberFooter" runat="server"></asp:Literal>
</FooterTemplate>
<ItemStyle HorizontalAlign="Center" />
<FooterStyle HorizontalAlign="Center" />
</asp:TemplateField>
<asp:TemplateField HeaderText="Title">
<ItemTemplate>
<%#Eval("Title")%>
</ItemTemplate>
<FooterTemplate>
<asp:TextBox ID="txtAddTitle" runat="Server" BorderStyle="Solid" BorderWidth="1px"
Font-Names="Tahoma" Font-Size="11px" BorderColor="Black" />
</FooterTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtEditTitle" Text='<%# Bind("Title") %>' runat="server" BorderStyle="Solid"
BorderWidth="1px" Font-Names="Tahoma" Font-Size="11px" BorderColor="Black" />
</EditItemTemplate>
</asp:TemplateField>
<asp:CommandField ShowEditButton="True" ButtonType="Button" UpdateText="Save" CancelText="Cancel"
EditText="Edit" HeaderText="Edit">
<FooterStyle BackColor="#669900" HorizontalAlign="Center" />
<HeaderStyle BackColor="#5A49A7" HorizontalAlign="Center" />
<ItemStyle BackColor="#FFC080" HorizontalAlign="Center" />
</asp:CommandField>
<asp:TemplateField HeaderText="Delete">
<FooterTemplate>
<asp:Button CommandName="Delete" Text="Delete" ID="btnRemove" runat="server" BorderStyle="Solid"
BorderWidth="1px" BackColor="#FFC080" Font-Names="Tahoma" Font-Size="11px" />
</FooterTemplate>
<ItemTemplate>
<asp:CheckBox ID="ChkRemove" runat="server"></asp:CheckBox>
</ItemTemplate>
<ItemStyle BackColor="LightCoral" HorizontalAlign="Center" />
<HeaderStyle BackColor="#5A49A7" HorizontalAlign="Center" />
<FooterStyle BackColor="#669900" HorizontalAlign="Center" />
</asp:TemplateField>
</Columns>
</asp:GridView>
このグリッドのモデルは Group クラスの List です。グループクラスは以下の通りです。
public class Group
{
public int GroupId {get; set; }
public string Title {get; set; }
}
GroupId は私のテーブルの主キーです。[削除] ボタンを押すと、次のエラーが表示されます。
インデックスが範囲外でした。負ではなく、コレクションのサイズより小さくなければなりません。
パラメータ名:インデックス
私の RowDeleting イベント ハンドラ コード:
protected void gvGroups_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
CheckBox chkRemove;
List<int> ids = new List<int>();
foreach (GridViewRow gvRow in gvGroups.Rows)
{
chkRemove = (CheckBox)gvRow.FindControl("ChkRemove");
if (chkRemove.Checked)
{
ids.Add(Int32.Parse(gvGroups.DataKeys[gvRow.RowIndex].Value.ToString()));
}
}
if (ids.Any())
{
GroupService.DeleteGroupById(ids);
}
this.BindGroups();
}