سؤال

لقد قرأت بعض المشاركات هنا وبعضها مرتبط بمشكلتي ، لكن لسبب ما ، لا تعمل الحلول بالنسبة لي. في الأساس لدي عناصر تحكم في GridView مع مربعات الاختيار. لديهم نفس الرمز بالضبط ، ولكن مجرد إطلاق أحداث مختلفة. وبالطبع لديهم معرفات مختلفة ومعلومات فريدة ذات صلة. هذا هو الشيء الغريب ، واحد منهم يعمل على ما يرام ، والآخر لا. سأقوم بنشر كلاهما هنا ، ضع في اعتبارك أن الشخص الذي يحتوي على ID = "unassigneLevibilityChk" هو onte الذي لا يعمل. لقد وضعت نقاط التوقف لاختبار ما إذا كنت داخل الوظيفة عندما أرسل البث بعد الشيك ولا شيء.

ملاحظة: كل من هذه الأشجار على نفس الصفحة ، لذا يرجى افتراض توجيه Codebehind وجميع الإعدادات بشكل صحيح للصفحة (نظرًا لأن أحدهم يعملون ، سأفترض أنه لا توجد مشكلة في ذلك)

هذا هو الذي لا يعمل:

   <table><tr><td class="style1">
    <asp:GridView ID="ElegibilitySelectedGridview" runat="server" 
        AutoGenerateColumns="False" DataKeyNames="ID" CellPadding="4" 
        ForeColor="#333333" GridLines="None" Width="475px">
        <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
    <Columns>
        <asp:TemplateField HeaderText="ID">
            <ItemTemplate>
                <asp:Label ID="lblID0" runat="server" Text='<%# Bind("ID") %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Select">
            <ItemTemplate>
                <asp:CheckBox ID="UnassignElegibilityChk" runat="server"  AutoPostBack="true" OnCheckedChanged="UnAssignElegibilityRecord"/>
            </ItemTemplate>                   
        </asp:TemplateField>
        <asp:boundfield datafield="Name"  HeaderText="Elegible Item" />
        </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>
    </td></tr></table>

الشخص الذي يعمل أدناه:

<table><tr><td class="style1">
<asp:DropDownList ID="ElegibilityGroupDDL" runat="server" AutoPostBack="True" OnSelectedIndexChanged="ElegibilityGroupDDL_SelectedIndexChanged">
    <asp:ListItem Value="0">ROOT</asp:ListItem>
</asp:DropDownList>
</td></tr><tr><td class="style1">
    <asp:TextBox ID="ElegibilityNameTxt" runat="server" Width="464px"></asp:TextBox>
    </td></tr><tr><td class="style1">
    <asp:Button ID="ElegibilitySaveBtn" runat="server" Text="Save Elegibility" />
    &nbsp;</td></tr><tr><td class="style1">
    <asp:Label ID="ElegibilityMsgLbl" runat="server" Text="" style="color: #0066CC"></asp:Label>
    </td></tr><tr style="background:silver"><td class="style1">
    &nbsp;</td></tr><tr><td class="style1">

    <asp:GridView ID="ElegibilityGridView" runat="server" 
        AutoGenerateColumns="False" DataKeyNames="ID" BackColor="White" 
        BorderColor="#DEDFDE" BorderStyle="None" BorderWidth="1px" CellPadding="4" 
        ForeColor="Black" GridLines="Vertical" Width="95%">
        <AlternatingRowStyle BackColor="White" />
    <Columns>
        <asp:TemplateField HeaderText="ID">
            <ItemTemplate>
                <asp:Label ID="lblID" runat="server" Text='<%# Bind("ID") %>'></asp:Label>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Select">
            <ItemTemplate>
                <asp:CheckBox ID="AssignElegibilityChk" runat="server" AutoPostBack="true" OnCheckedChanged="AssignElegibility"/>
            </ItemTemplate>                   
        </asp:TemplateField>
        <asp:boundfield datafield="Name"  HeaderText="Elegible Item" />
        </Columns>
        <FooterStyle BackColor="#CCCC99" />
        <HeaderStyle BackColor="#6B696B" Font-Bold="True" ForeColor="White" />
        <PagerStyle BackColor="#F7F7DE" ForeColor="Black" HorizontalAlign="Right" />
        <RowStyle BackColor="#F7F7DE" />
        <SelectedRowStyle BackColor="#CE5D5A" Font-Bold="True" ForeColor="White" />
        <SortedAscendingCellStyle BackColor="#FBFBF2" />
        <SortedAscendingHeaderStyle BackColor="#848384" />
        <SortedDescendingCellStyle BackColor="#EAEAD3" />
        <SortedDescendingHeaderStyle BackColor="#575357" />
    </asp:GridView>
    </td></tr></table>

تطلق Gridview العاملة هذه الوظيفة بنجاح:

 Public Sub AssignElegibility()
    If Page.IsPostBack Then
        For Each row As GridViewRow In ElegibilityGridView.Rows
            Dim checkbox As CheckBox = CType(row.FindControl("AssignElegibilityChk"), CheckBox)
            'Check if the checkbox is checked.'
            'value in the HtmlInputCheckBox Value property is set as the //value of the delete commands parameter.'
            If checkbox.Checked Then
                ' Retreive the Employee ID'
                Dim lblID As Label = CType(row.FindControl("lblID"), Label)
                Dim elegibilityID As Integer = Convert.ToInt32(lblID.Text)
                Elegibility.AddElegibilityMapping(CInt(Request("ResID")), elegibilityID)
                ElegibilitySelectedItems(CInt(Request("ResID")))
                ElegibilityGroupDDL_SelectedIndexChanged()
            End If
        Next
    End If
End Sub

من المفترض أن يطلق الشخص غير العاملة هذا الرمز وهو ليس كذلك.

Public Sub UnAssignElegibilityRecord(ByVal sender As Object, ByVal e As System.EventArgs)
    PrintLine("Inside the sub")
    If Page.IsPostBack Then
        For Each row As GridViewRow In ElegibilitySelectedGridview.Rows
            Dim checkbox As CheckBox = CType(row.FindControl("UnassignElegibilityChk"), CheckBox)
            'Check if the checkbox is checked.'
            'value in the HtmlInputCheckBox Value property is set as the //value of the delete commands parameter.'
            If checkbox.Checked Then
                ' Retreive the Employee ID'
                Dim lblID As Label = CType(row.FindControl("lblID0"), Label)
                Dim elegibilityID As Integer = Convert.ToInt32(lblID.Text)
                Elegibility.RemoveElegibilityMapping(elegibilityID)
                ElegibilitySelectedItems(CInt(Request("ResID")))
                ElegibilityGroupDDL_SelectedIndexChanged()
            End If
        Next
    End If
End Sub
هل كانت مفيدة؟

المحلول

لا أعرف ما إذا كان أي شيء من ما يلي يحل مشكلتك ، لكن ...

  1. لماذا يتمتع معالج "العمل" الخاص بك من CheckedChanged بالتوقيع الخاطئ؟ يحتاج إلى المرسل و eventsargs.

    protected Sub AssignElegibility(ByVal sender As Object, ByVal e As System.EventArgs)

  2. لماذا تكرر الشبكات للحصول على خانة الاختيار والصف الذي تغير؟ هذا يعمل أيضا:

    Dim checkbox As CheckBox = DirectCast(sender,CheckBox)

للحصول على الصف ، عليك فقط إلقاء NamingContainer من خانة الاختيار الخاصة بك إلى GridViewRow.

Dim row as GridViewRow =DirectCast(checkbox.NamingContainer,GridViewRow)

تعديل: هل تقوم بإعادة تنظيم ElegibilityselectedView-Grid على Postback؟ يجب أن تفعل ذلك فقط عندما not Page.IsPostback, ، وإلا لن تطلق الأحداث.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top