0

我在 UpdatePanel 内的 GridView 中有两个按钮。

对于这两个按钮,我需要获取单击按钮所在行的 rowId/selectedIndex。我还需要根据单击的按钮做一些额外的事情。一个将重定向(编辑)另一个(请求信)将更新 sql 数据库。这两个函数都需要行的 selectedIndex。

按钮是最后两个按钮。

<asp:GridView runat="server" AutoGenerateColumns="False" 
            DataSourceID="SqlDataSource4" EnableModelValidation="True" 
            DataKeyNames="id" Width="100%" 
            AllowSorting="True" CssClass="Grid" GridLines="None" 
            onrowcreated="SubpoenaGrid_RowCreated" ID="SubpoenaGrid" 
            onrowdatabound="SubpoenaGrid_RowDataBound" 
            <!--onselectedindexchanged="SubpoenaGrid_SelectedIndexChanged" -->
            onrowcommand="SubpoenaGrid_RowCommand">

            <Columns>
                <asp:CommandField ShowSelectButton="True" ItemStyle-CssClass="HiddenColumn" 
                        HeaderStyle-CssClass="HiddenColumn">
                        <HeaderStyle CssClass="HiddenColumn"></HeaderStyle>
                        <ItemStyle CssClass="HiddenColumn"></ItemStyle>
                </asp:CommandField>
                <asp:BoundField DataField="id" HeaderText="id" InsertVisible="False" 
                    ReadOnly="True" SortExpression="id" Visible="False" />
                <asp:BoundField DataField="type" HeaderText="Type" 
                    SortExpression="type" >

                </asp:BoundField>
                <asp:BoundField DataField="status" HeaderText="Status" 
                    SortExpression="status" >

                </asp:BoundField>
                <asp:BoundField DataField="dateRequested" HeaderText="Request Date" 
                    SortExpression="dateRequested" DataFormatString="{0:d}" >

                </asp:BoundField>
                <asp:BoundField DataField="locName" HeaderText="Recipient" 
                    SortExpression="locName" >

                </asp:BoundField>
                <asp:BoundField DataField="name" HeaderText="Debtor" 
                    SortExpression="name" >

                </asp:BoundField>
                <asp:ButtonField ButtonType="Button" CommandName="edit" Text="Edit" />
                <asp:ButtonField ButtonType="Button" CommandName="requestLet" HeaderText="Request Letter?" Text="Request Letter" />
            </Columns>
            <HeaderStyle HorizontalAlign="Left" />
        </asp:GridView>
4

1 回答 1

1

首先,您需要将最后两列(绑定字段)转换为模板字段,如下所示:

<asp:TemplateField>
    <ItemTemplate>
        <asp:Button ID="Button1" runat="server" CausesValidation="false" CommandName="edit" Text="Edit" OnCommand="OnGridViewItemCommand" />
    </ItemTemplate>
</asp:TemplateField>
<asp:TemplateField HeaderText="Request Letter?">
    <ItemTemplate>
        <asp:Button ID="Button2" runat="server" CausesValidation="false" CommandName="requestLet" Text="Request Letter" OnCommand="OnGridViewItemCommand" />
    </ItemTemplate>
</asp:TemplateField>

然后在这样的code-behind实现OnGridViewItemCommand方法中:

protected void OnGridViewItemCommand(object sender, CommandEventArgs e)
{
    var row = (sender as Button).NamingContainer as GridViewRow;

    int dataItemIndex = row.DataItemIndex; //index of selected item in underlying datasource
    int itemIndex = row.RowIndex; // index of selected item in Rows collection

    switch (e.CommandName)
    {
        case "edit":
            //edit action code
            break;

        case "requestLet":
            //request Letter action code
            break;

        default:
            break;

    }
}
于 2013-11-12T19:01:47.217 回答