如何在gridview中嵌入链接按钮检查同一行上的嵌入式复选框?

时间:2011-11-03 16:46:00

标签: javascript asp.net

我有一个包含4个可见列的gridview,第一个可见列包含一个评估ID的链接按钮,第四个可见列包含一个复选框。

最好使用javascript我想在单击链接按钮时检查相应的复选框(同一行),同时取消选中gridview中的所有其他复选框。

<asp:GridView ID="gdvSalesOrder" runat="server" Width="100%" HorizontalAlign="Center"
                            AutoGenerateColumns="false" CssClass="mGrid" PagerStyle-CssClass="pgr" AlternatingRowStyle-CssClass="alt"
                            SelectedRowStyle-CssClass="alt-backcolour">
                            <Columns>
                                <asp:TemplateField Visible="false">
                                    <ItemTemplate>
                                        <asp:TextBox ID="txtID" runat="server" Text='<%# Eval("Id") %>'></asp:TextBox>
                                    </ItemTemplate>
                                </asp:TemplateField>
                                <asp:CommandField Visible="false" ShowSelectButton="true" />
                                <asp:TemplateField HeaderText="ORDER NUMBER" ItemStyle-Width="31%" ItemStyle-HorizontalAlign="Center">
                                    <HeaderStyle HorizontalAlign="Center" />
                                    <ItemTemplate>
                                        <asp:LinkButton ID="lnkOrderNumber" ClientIDMode="Static" runat="server" CommandName="select"
                                            CommandArgument='<%# Eval("OrderNumber") %>' Text='<%# Eval("OrderNumber") %>'></asp:LinkButton>
                                    </ItemTemplate>
                                </asp:TemplateField>
                                <asp:TemplateField HeaderText="ACCOUNT REF" ItemStyle-Width="31%" ItemStyle-HorizontalAlign="Center">
                                    <HeaderStyle HorizontalAlign="Center" />
                                    <ItemTemplate>
                                        <asp:Label ID="lblCustomerAccountReference" runat="server" Text='<%# Eval("CustomerAccountReference") %>'></asp:Label>
                                    </ItemTemplate>
                                </asp:TemplateField>
                                <asp:TemplateField HeaderText="QUOTED DUE DATE" ItemStyle-Width="31%" ItemStyle-HorizontalAlign="Center">
                                    <HeaderStyle HorizontalAlign="Center" />
                                    <ItemTemplate>
                                        <asp:Label ID="lblQuotedDueDate" runat="server" Text='<%# Eval("QuotedDueDate", "{0:d}") %>'></asp:Label>
                                    </ItemTemplate>
                                </asp:TemplateField>
                                <asp:TemplateField ItemStyle-Width="6%" ItemStyle-HorizontalAlign="Center">
                                    <HeaderStyle HorizontalAlign="Center" />
                                    <HeaderTemplate>
                                        <input id="chkAll" type="checkbox" onclick="javascript:SelectAllCheckboxes(this);" />
                                    </HeaderTemplate>
                                    <ItemTemplate>
                                        <asp:CheckBox ID="chkSelect" runat="server" />
                                    </ItemTemplate>
                                </asp:TemplateField>
                            </Columns>
                            <EmptyDataTemplate>
                                No Sales Orders Found.
                            </EmptyDataTemplate>
                        </asp:GridView>

2 个答案:

答案 0 :(得分:1)

我会使用OnCommand代替OnClick,并使用CommandArgument传递项目索引:

<asp:TemplateField>
    <ItemTemplate>
        <asp:LinkButton ID="LinkButton1" runat="server" Text="Click" CommandArgument='<%# Container.ItemIndex %>' OnCommand="LinkButton1_Command" ... />
    </ItemTemplate>
</asp:TemplateField>

代码隐藏:

protected void LinkButton1_Command(object sender, CommandEventArgs e)
{
    CheckBox chk = GridView1.Rows[(int)e.CommandArgument].FindControl("CheckBox1") as CheckBox;
    if (chk != null)
        chk.Checked = true;    
}

答案 1 :(得分:0)

Grid_RowDataBound()事件处理程序中,您可以在按钮上附加客户端onClick事件以选中复选框。

在该方法中,您可以访问网格中的按钮以及chkSelect复选框的ClientID。您可以对此进行硬编码或将参数传递给JS函数。

lnkOrderNumber.OnClientClick = "CheckOnlyOne('"+chkSelect.ClientID+"');";

然后JS:

function CheckOnlyOne(checkboxID)
{
    // TODO: uncheck all checkboxes
    document.getElementById(checkboxID).checked = true;
}