Problem s viditelností checkboxu v DataGridu v ASP.NET   otázka

VB.NET, ASP.NET WebForms

Dobrý den, chci se zeptat jak dostanu do kódu ve VS Comunity 2013 událost pro checkbox v datagridu.

<asp:GridView ID="GridView1" runat="server" >
            <Columns>
                <asp:TemplateField HeaderText="Select">
                    <ItemTemplate>
                        <asp:CheckBox ID="chkSelect" runat="server" AutoPostBack="True"
                            oncheckedchanged="chkSelect_CheckedChanged"  />
                    </ItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>

v kodu mám

Private Sub AdminCheckBox_CheckedChanged(sender As Object, e As EventArgs) Handles AdminCheckBox.CheckedChanged
        Dim chb As CheckBox = CType(sender, CheckBox)
        Dim row As GridViewRow = CType(chb.NamingContainer, GridViewRow)
        Dim username As String = GridView1.DataKeys(row.DataItemIndex).Value

        If chb.Checked Then   'přiřadit uživatele do role
            Roles.AddUserToRole(username, "admin")
        Else                  'odebrat uživatele z role
            Roles.RemoveUserFromRole(username, "admin")
        End If

    End Sub

Jenže VS ten control nevidí a hlásí chybu že AdminCheckBox není členem.

Error	1	Handles clause requires a WithEvents variable defined in the containing type or one of its base types.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Omlouvám se zapsal jsem zbytek textu do zdrojového kodu.

Jenže VS v kódu ten checkbox nevidí a hlásí chybu že AdminCheckBox není členem.

Error 1 Handles clause requires a WithEvents variable defined in the containing type or one

Dělám něco špatně, nebo se něco změnilo .... kdysi dávno mi to fungovalo ještě za dob VS 2008

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Mrkněte sem

http://www.dotnetportal.cz/clanek/114/Pi...

třeba tam najdete inspiraci...

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Dobrý den, přesně v tomto článku jsem inspiraci hledal ....ale.

Z článku:

Nyní nám tedy zbývá ošetřit událost CheckedChanged našeho CheckBoxu. Podle toho, jestli bude zaškrtnutý, nebo ne, uživatele do role admin přidáme, nebo z této role odebereme. Nahoře v okně kódu vyberte v prvním rozbalovacím seznamu komponentu AdminCheckBox a ve druhém událost CheckedChanged. Tím se nám vygeneruje její kód.

Problém:

V prvním rozbalovacím seznamu je pouze prvek GridView. Dříve tuším (ve starých verzích VS) tam byli vidět i prvky uvnitř gridu, i když možná se pletu.

Nakonec jsem to vyřešil následovně, asi špatně, ale zatím to funguje a později se k tomu vrátím.

Jen jsem potřeboval upravit jedinou stránku.Primárně ted dělám v PL-SQL na Oracle DB takže nemám čas se tomu věnovat do hloubky.

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="false" DataKeyNames="UserName" CssClass="grid">
        <RowStyle CssClass="rA" />
        <AlternatingRowStyle CssClass="rB" />
        <Columns>
            <asp:BoundField HeaderText="Uživatelské jméno" ItemStyle-Font-Bold="true" DataField="UserName" />
            <asp:BoundField HeaderText="E-mail" DataField="Email" />
            <asp:BoundField HeaderText="Naposledy přihlášen" DataField="LastLoginDate" />
            <asp:TemplateField HeaderText="Administrátor" ItemStyle-HorizontalAlign="Center">
                <ItemTemplate>
                    <asp:CheckBox ID="AdminCheckBox" runat="server" AutoPostBack="true" Checked='<%#Roles.IsUserInRole(Eval("UserName").ToString(), "Admin")%>' OnCheckedChanged="AdminCheckBox_CheckedChanged"   Enabled='<%#UCase(Eval("UserName")) <> "ADMIN"%>'   />
                </ItemTemplate>
            </asp:TemplateField>
       
           
        </Columns>
    </asp:GridView>

a do kódu jsem vložil toto ručně psáno.

    public Sub AdminCheckBox_CheckedChanged(sender As Object, e As EventArgs)

        Dim chb As CheckBox = CType(sender, CheckBox)
        Dim row As GridViewRow = CType(chb.NamingContainer, GridViewRow)
        Dim username As String = GridView1.DataKeys(row.DataItemIndex).Value

        If chb.Checked Then   'přiřadit uživatele do role
            Roles.AddUserToRole(username, "admin")
        Else                  'odebrat uživatele z role
            Roles.RemoveUserFromRole(username, "admin")
        End If

    End Sub

Ten Public je tam z důvodu že když tam dam Private tak skončí chybou:

Compiler Error Message: BC30456: 'AdminCheckBox_CheckedChanged' is not a member of 'ASP.administrace_spravaroli_aspx'.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ňák nechápu, vždyť v tom ASPNET kódu žádný "AdminCheckBox" není, tam máme událost nazvanou chkSelect_CheckedChanged u kontrolu s ID chkSelect.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Omlouvám se moje chyba, překopíroval jsem ASP kód ze špatného okna :)

Každopádně problém s viditelností ovládacího prvku a tedy i přístupu k jeho událostem trvá.

Nicméně "nějak" viz výše jsem to vyřešil a vrátím se k tomu později.

Děkuji všem za pomoc.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

nějak jsem to vyřešil určitě pomůže další lidem s podobným problémem

nahlásit spamnahlásit spam 0 odpovědětodpovědět

"nějak" vyřešil viz. výše :D

Tam je celé řešení nejdříve číst pak kritizovat!

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:
Heslo:

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback