Динамически созданные флажки, обработчик событий и многое другое - vb. NET asp.NET - PullRequest
0 голосов
/ 06 мая 2020

Я пытаюсь управлять элементом управления checkall в gridview, но сталкиваюсь с несколькими проблемами.

Это мой элемент управления gridview:

    <asp:GridView ID="gvShow" runat="server" AutoPostback="True" AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False" Height="224px" HorizontalAlign="Center" Width="761px" CellPadding="4" ForeColor="#333333" DataSourceID="sid_db">
      
        <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
        
        <Columns>
            <asp:TemplateField ItemStyle-Width="50px">
                    <HeaderTemplate>
                        <asp:CheckBox ID="chkCheckAll" runat="server" AutoPostBack="False" OnCheckedChanged="chkCheckAll_CheckedChanged" />
                    </HeaderTemplate>
                    <ItemTemplate>
                        <asp:CheckBox ID="chkCheck" runat="server" />
                    </ItemTemplate>

<ItemStyle Width="50px"></ItemStyle>
            </asp:TemplateField>
            <asp:BoundField DataField="Scope" HeaderText="Scope" SortExpression="Scope" />
            <asp:BoundField DataField="Brand" HeaderText="Brand" SortExpression="Brand" />
            <asp:BoundField DataField="Site ID" HeaderText="Site ID" SortExpression="Site ID" />
            <asp:BoundField DataField="Site Name" HeaderText="Site Name" SortExpression="Site Name" />
            <asp:BoundField DataField="Address" HeaderText="Address" SortExpression="Address" />
            <asp:BoundField DataField="CAP" HeaderText="CAP" SortExpression="CAP" />
            <asp:BoundField DataField="City" HeaderText="City" SortExpression="City" />
            <asp:BoundField DataField="Country" HeaderText="Country" SortExpression="Country" />
            <asp:BoundField DataField="Master_ID" HeaderText="Master_ID" SortExpression="Master_ID" ItemStyle-CssClass="hiddencol"  HeaderStyle-CssClass="hiddencol">
<HeaderStyle CssClass="hiddencol"></HeaderStyle>

<ItemStyle CssClass="hiddencol"></ItemStyle>
            </asp:BoundField>
        </Columns>

        <EditRowStyle BackColor="#999999" />
        <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
        <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
        <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
        <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
        <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
        <SortedAscendingCellStyle BackColor="#E9E7E2" />
        <SortedAscendingHeaderStyle BackColor="#506C8C" />
        <SortedDescendingCellStyle BackColor="#FFFDF8" />
        <SortedDescendingHeaderStyle BackColor="#6F8DAE" />

    </asp:GridView>

Первая проблема: Элементы управления флажками создаются динамически, и у меня, честно говоря, есть ощущение, что я должен создать обработчик событий для них, но я не Я не знаю, как это сделать, и я не знаю, где разместить / написать этот код. Я просто вижу, что эти элементы управления не распознаются, как только я пытаюсь сослаться на них в своем коде.

Вторая проблема: Поскольку я в значительной степени новичок ie, я сделал шаг назад и протестировал с помощью какого-то мусорного кода, если мне удалось установить динамическую проверку всех флажков при загрузке страницы ... вот мой тест ... результат полный сбой, ничего не происходит. Я даже пытался поместить код в событие инициализации, но результат тот же.

                For Each row As GridViewRow In gvShow.Rows
                    DirectCast(row.FindControl("chkCheck"), CheckBox).Checked = True
                Next

Буду признателен, если кто-нибудь поможет мне с этими проблемами. Заранее благодарим за уделенное время.

С уважением,

1 Ответ

0 голосов
/ 11 мая 2020

Я сам нашел ответ. Мне пришлось изменить код следующим образом:

<asp:GridView ID="gvShow" runat="server" AllowPaging="True" AllowSorting="True" AutoGenerateColumns="False" Height="224px" HorizontalAlign="Center" Width="761px" CellPadding="4" ForeColor="#333333">
      
        <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
        
        <Columns>
            <asp:TemplateField ItemStyle-Width="50px">
                    <HeaderTemplate>
                        <asp:CheckBox ID="ChkSelectAll" runat="server" Autopostback="True" OnCheckedChanged="ChkSelectAll_CheckedChanged" />
                    </HeaderTemplate>
                    <ItemTemplate>
                        <asp:CheckBox ID="ChkSigleItem" runat="server" OnCheckedChanged="ChkSigleItem_CheckedChanged" />
                    </ItemTemplate>

<ItemStyle Width="50px"></ItemStyle>
            </asp:TemplateField>
            <asp:BoundField DataField="Scope" HeaderText="Scope" SortExpression="Scope" />
            <asp:BoundField DataField="Brand" HeaderText="Brand" SortExpression="Brand" />
            <asp:BoundField DataField="Site ID" HeaderText="Site ID" SortExpression="Site ID" />
            <asp:BoundField DataField="Site Name" HeaderText="Site Name" SortExpression="Site Name" />
            <asp:BoundField DataField="Address" HeaderText="Address" SortExpression="Address" />
            <asp:BoundField DataField="CAP" HeaderText="CAP" SortExpression="CAP" />
            <asp:BoundField DataField="City" HeaderText="City" SortExpression="City" />
            <asp:BoundField DataField="Country" HeaderText="Country" SortExpression="Country" />
            <asp:BoundField DataField="Master_ID" HeaderText="Master_ID" SortExpression="Master_ID" ItemStyle-CssClass="hiddencol"  HeaderStyle-CssClass="hiddencol">
<HeaderStyle CssClass="hiddencol"></HeaderStyle>

<ItemStyle CssClass="hiddencol"></ItemStyle>
            </asp:BoundField>
        </Columns>

        <EditRowStyle BackColor="#999999" />
        <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
        <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
        <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
        <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
        <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
        <SortedAscendingCellStyle BackColor="#E9E7E2" />
        <SortedAscendingHeaderStyle BackColor="#506C8C" />
        <SortedDescendingCellStyle BackColor="#FFFDF8" />
        <SortedDescendingHeaderStyle BackColor="#6F8DAE" />

    </asp:GridView>

А потом:

   Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load

        If Page.IsPostBack = False Then

            ''Set value for default SQL query
            Dim query As String
            query = "SELECT Sites.Master_ID AS Master_ID, Scopes.Name AS Scope, Brands.Extension AS [Brand], Sites.ID AS [Site ID], Sites.Name AS [Site Name], Sites.Address, Sites.CAP, Sites.City, Countries.Name AS Country FROM Sites INNER JOIN Scopes ON Sites.scope_ID = Scopes.ID INNER JOIN Brands ON Sites.brand_ID = Brands.ID INNER JOIN Countries ON Sites.country_ID = Countries.ID"
            sid_db.SelectCommand = query

            gvShow.DataSource = sid_db
            gvShow.DataBind()

        End If

    End Sub

    Protected Sub ChkSelectAll_CheckedChanged(sender As Object, e As EventArgs)

        Dim a As Boolean = DirectCast(sender, CheckBox).Checked
        For Each row As GridViewRow In gvShow.Rows
            Dim cbx As CheckBox = row.FindControl("ChkSigleItem")
            cbx.Checked = a
        Next

    End Sub
...