Avatar billede simsen Mester
21. november 2012 - 02:14 Der er 2 kommentarer og
1 løsning

Find ImageButton Control i repeater fejler

Hej,

Jeg håber I kan hjælpe mig - jeg er nemlig ved at blive idiot af en simpel ting - jeg har gjort 1 million gange før.

Jeg har en repeater og i den har jeg en imagebutton. På imagebuttons OnClientClick event vil jeg så have tilføjet en tekst: "return confirm('Deleting continue?')"

Hvis jeg putter den på direkte i aspx filen - så har jeg ingen problemer. Men det kan jeg så ikke bruge, da jeg sådan set gerne vil bestemme min tekst i codebehind filen.

Nu forsøger jeg så at bruge OnItemDataBound med følgende:
protected void repCompanyToCompanyView_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {
        Ansi_WebConfigSettings config = new Ansi_WebConfigSettings();
        Ansi_Resources resourcesAllPages = new Ansi_Resources();
        string message = string.Empty;
        if (resourcesAllPages.GetLanguageTextsForPage(Ansi_WebPageBase.SystemList.AnsiCrm.ToString(), "~/AnsiCrm_AllPages", config.ConfigCulture) == AnsiStatus.Success)
        {
            message = resourcesAllPages.GetMessageForPage("ReturnConfirmDelete");

            if ((e.Item.ItemType == ListItemType.Item) || (e.Item.ItemType == ListItemType.AlternatingItem))
            {
                ImageButton ibtnDeleteRelationCompanyToCompany = (ImageButton)(repCompanyToCompanyView.FindControl("ibtnDeleteRelationCompanyToCompany"));
                //ibtnDeleteRelationCompanyToCompany.OnClientClick = message;
                ibtnDeleteRelationCompanyToCompany.OnClientClick = "return confirm('Deleting continue?')";
            }
        }
    }

Den finder IKKE min ImageButton - men fejler så heller ikke. Den undlader bare at knytte teksten på (kan jeg se når jeg laver en vis kilde). Og det den så gør er at fucke mit layout fuldstændig ud af propertioner.

Så er gode råd dyre - men tanke var så at jeg måske loadede repeateren for sent, så jeg lavede mig en metode, som jeg smed på i PageLoad EFTER jeg havde bundet repeateren med data (og ja der er data i repeateren) på følgende måde:

private void GetResourceTextsOnPageAfterLoad()
    {
        Ansi_WebConfigSettings config = new Ansi_WebConfigSettings();
        Ansi_Resources resourcesAllPages = new Ansi_Resources();
        string message = string.Empty;
        if (resourcesAllPages.GetLanguageTextsForPage(Ansi_WebPageBase.SystemList.AnsiCrm.ToString(), "~/AnsiCrm_AllPages", config.ConfigCulture) == AnsiStatus.Success)
        {
            message = resourcesAllPages.GetMessageForPage("ReturnConfirmDelete");

            foreach (RepeaterItem item in repCompanyToCompanyView.Items)
            {
                if ((item.ItemType == ListItemType.Item) || (item.ItemType == ListItemType.AlternatingItem))
                {
                    ImageButton ibtnDeleteRelationCompanyToCompany = (ImageButton)(repCompanyToCompanyView.FindControl("ibtnDeleteRelationCompanyToCompany"));
                    //ibtnDeleteRelationCompanyToCompany.OnClientClick = message;
                    ibtnDeleteRelationCompanyToCompany.OnClientClick = "return confirm('Deleting continue?')";
                }
            }
        }
    }

Bruger jeg ovennævnte får jeg en fejl: Object reference not set to an instance of an object når jeg forsøger at loade siden.

Og ja, nu aner jeg altså ikke hvad jeg kan prøve mere.

Her er den del af min repeater, hvor I kan se, at jeg har en ImageButton - ibtnDeleteRelationCompanyToCompany

<asp:Repeater ID="repCompanyToCompanyView" runat="server" OnItemCommand="repCompanyToCompanyView_ItemCommand" OnItemDataBound="repCompanyToCompanyView_ItemDataBound">
            <HeaderTemplate>
                <table cellpadding="0" cellspacing="0" border="0" width="100%">
                    <tr>
                        <td class="repHeaderBackground"></td>
                        <td class="repHeaderBackground"></td>
                        <td class="repHeaderBackground">
                            <asp:Label ID="lblComToComNameHeadline" runat="server" Text="Name"></asp:Label>
                        </td>
                        <td class="repHeaderBackground">
                            <asp:Label ID="lblComToComRelationTypeHeadline" runat="server" Text="Relation Type"></asp:Label>
                        </td>
                        <td class="repHeaderBackground">
                            <asp:Label ID="lblComToComCreateDate" runat="server" Text="Create Date"></asp:Label>
                        </td>
                        <td class="repHeaderBackground">
                            <asp:Label ID="lblComToComUpdateDate" runat="server" Text="Update Date"></asp:Label>
                        </td>
                    </tr>
            </HeaderTemplate>
            <ItemTemplate>                   
                    <tr>
                        <td class="repRow" style="vertical-align: middle; width: 10px">
                            <asp:ImageButton ID="ibtnDeleteRelationCompanyToCompany" runat="server" SkinID="delete" CommandArgument='<%# Eval("ORMId") %>' CommandName="DeleteRelationCompanyToCompany" />
                        </td>

Som sagt - så er jeg udgået for gode ideer - og håber en af jer, kan se fejlen, eller har en anden idé til jeg kan finde den forbistrede ImageButton i codebehind.

mvh
simsen :-)
Avatar billede TryingToImprove Nybegynder
21. november 2012 - 07:21 #1
Hej. Nu har jeg ikke ASP.net åben, men burde det ikke være: e.Item.FindControl("x")?

ImageButton ibtnDeleteRelationCompanyToCompany = (ImageButton)(e.Item.FindControl("ibtnDeleteRelationCompanyToCompany"));
Avatar billede simsen Mester
22. november 2012 - 22:01 #2
Trying

Du er bare en guttermand. Det var jo netop lige det, der var problemet. Mange tak for hjælp og husk at smide det som et svar. Og undskyld tiden - men gik lige hen og fik en forstuvet skulder i går :-)
Avatar billede TryingToImprove Nybegynder
22. november 2012 - 22:06 #3
Av. :-) Men, super!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester