[C# .Net] Weird probleem met ItemCommand uit Telerik RadGrid

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • BikkelZ
  • Registratie: Januari 2000
  • Laatst online: 21-02 08:50
Ik ben nu al een paar uur te lang mijn tanden stuk aan het bijten op het volgende probleem. Ik heb een Panel en een Button, en als ik op die Button click voer ik een functie uit die de Panel op Visible zet en een bepaalde string toont. Tot dusver niets wereldschokkends.

C#:
1
2
3
4
5
6
7
8
<asp:Button ID="btnShowRequirements" runat="server" Text="Show" 
        onclick="btnShowRequirements_Click" />
        
<asp:Panel ID="pnlRequirments" runat="server" Visible="false">
    <span id="spanText" runat="server" />
    <asp:Button ID="btnClose" Text="Sluiten" runat="server" 
        onclick="btnClose_Click" />
</asp:Panel>


C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
protected void btnClose_Click(object sender, EventArgs e)
{
    pnlRequirments.Visible = false;
}

private void ShowRequirments(string requirments)
{
    pnlRequirments.Visible = true;
    spanText.InnerHtml = requirments;
}

protected void btnShowRequirements_Click(object sender, EventArgs e)
{
    ShowRequirments("Just a string");
}


Nu heb ik een RadGrid met daarin een knop, die precies het zelfde doet. Als ik op die knop klik, dan raakt hij mijn breakpoint in de ShowRequirments functie, dus die wordt uitgevoerd. Toch is het uiteindelijk gerenderde resultaat van mijn pagina niet wat ik er van zou verwachten.

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
protected void grdAvailableOfferings_ItemCommand(object source, GridCommandEventArgs e)
{
    switch (e.CommandName)
    {
        case "Requirments":
            string id = grdAvailableOfferings.MasterTableView.DataKeyValues[e.Item.ItemIndex]["Id"].ToString();
            foreach (BpvOffering offering in AvailableOfferings)
            {
                if (offering.Id != id)
                {
                    continue;
                }

                StringBuilder requirments = new StringBuilder();
                foreach (BpvOfferingRequirment requirment in offering.Requirments)
                {
                    requirments.Append(requirment.Description + "<br />");
                }

                ShowRequirments(requirments.ToString());

                break;
            }

            break;
    }
}


Ik kan eigenlijk nergens (ook niet met een ViewState tussentijdse opslag) er voor zorgen dat er ook maar een deuk in een pakje boter geslagen wordt door die hele functie. Hij loopt er doorheen, maar er gebeurt feitelijk helemaal niks.

iOS developer


Acties:
  • 0 Henk 'm!

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Wat werkt er nou niet precies zoals je zou verwachten? De afhandeling van de Requirements case of de functie ShowRequirements? Wat zou er moeten gebeuren?

If it isn't broken, fix it until it is..


Acties:
  • 0 Henk 'm!

  • BikkelZ
  • Registratie: Januari 2000
  • Laatst online: 21-02 08:50
Niemand_Anders schreef op woensdag 15 juli 2009 @ 10:34:
Wat werkt er nou niet precies zoals je zou verwachten? De afhandeling van de Requirements case of de functie ShowRequirements? Wat zou er moeten gebeuren?
Het gerenderde resultaat van mijn pagina is alsof er niets gebeurd is. Zelfs ViewStates lijken niet te wijzigen (die testcode staat er inmiddels al niet meer in trouwens).

Verder gebruikt de pagina inmiddels helemaal geen Ajax meer behalve de RadGrids zelf.

iOS developer


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Als het echt het resultaat in het RadGrid is zou ik eens contact opnemen met de leverancier van het Grid. Blijkbaar zit het probleem hem daarin.

Ik neem aan dat Telerik de leverancier is. Die hebben erg goede support, dus ik zou eens een test-case maken en het bij hun melden.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • Niemand_Anders
  • Registratie: Juli 2006
  • Laatst online: 09-07-2024

Niemand_Anders

Dat was ik niet..

Heb je al eens gekeken wat de inhoud is van de parameter welke aan ShowRequirements wordt meegegeven? Is deze leeg of heeft deze content welke juist lijkt?

Zo ja, dan zul je moeten kijken naar je panels. Wat ik vermoed is dat omdat je ShowRequirements in een foreach loop (AvailableOfferings) aanroept, je resultaat continue wordt overschreven want ik ze ze niet toegevoegd worden..

If it isn't broken, fix it until it is..


Acties:
  • 0 Henk 'm!

  • BikkelZ
  • Registratie: Januari 2000
  • Laatst online: 21-02 08:50
Niemand_Anders schreef op woensdag 15 juli 2009 @ 11:23:
Heb je al eens gekeken wat de inhoud is van de parameter welke aan ShowRequirements wordt meegegeven? Is deze leeg of heeft deze content welke juist lijkt?
Ziet er goed uit in de debugger.
Niemand_Anders schreef op woensdag 15 juli 2009 @ 11:23:Zo ja, dan zul je moeten kijken naar je panels. Wat ik vermoed is dat omdat je ShowRequirements in een foreach loop (AvailableOfferings) aanroept, je resultaat continue wordt overschreven want ik ze ze niet toegevoegd worden..
Die foreach loop wordt beeindigd door het break statement op het moment nadat ShowRequirments uitgevoerd wordt, dat zou het niet mogen zijn. Ook wordt de Panel niet visible gezet, de Button zie ik niet. Ook kom ik in de debugger niet meerdere malen op de zelfde plek terecht. Wel ben ik het met je eens dat ik het vullen van die StringBuilder misschien buiten de foreach loop had kunnen doen in het kader van leesbaarheid, maar dan had ik een extra check moeten maken die controleerde of de juiste offering was gevonden of helemaal niets.
Woy schreef op woensdag 15 juli 2009 @ 11:22:
Als het echt het resultaat in het RadGrid is zou ik eens contact opnemen met de leverancier van het Grid. Blijkbaar zit het probleem hem daarin.

Ik neem aan dat Telerik de leverancier is. Die hebben erg goede support, dus ik zou eens een test-case maken en het bij hun melden.
Zou geen slecht idee zijn op zich, maar mijn ervaring is dat GoT sneller is dan de meeste leveranciers ;)

Het is overigens een aangepast voorbeeldje van Telerik.

[ Voor 21% gewijzigd door BikkelZ op 15-07-2009 11:33 ]

iOS developer


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
BikkelZ schreef op woensdag 15 juli 2009 @ 11:29:
[...]
Zou geen slecht idee zijn op zich, maar mijn ervaring is dat GoT sneller is dan de meeste leveranciers ;)

Het is overigens een aangepast voorbeeldje van Telerik.
Mijn ervaring is dat Telerik erg snel reageert op problemen, en als het echt een specifiek Telerik RadGrid probleem is, hebben hun er natuurlijk ook een stuk meer inzicht in.
BikkelZ schreef op woensdag 15 juli 2009 @ 11:29:
Die foreach loop wordt beeindigd door het break statement op het moment nadat ShowRequirments uitgevoerd wordt, dat zou het niet mogen zijn. Ook wordt de Panel niet visible gezet, de Button zie ik niet. Ook kom ik in de debugger niet meerdere malen op de zelfde plek terecht. Wel ben ik het met je eens dat ik het vullen van die StringBuilder misschien buiten de foreach loop had kunnen doen in het kader van leesbaarheid, maar dan had ik een extra check moeten maken die controleerde of de juiste offering was gevonden of helemaal niets.
Blijkbaar gebeurt er toch iets anders. Als je in de debugger al verschillend gedrag ziet, zul je verder moeten debuggen wat dat gedrag veroorzaakt. Het is niet zo dat de debugger zelf het gedrag veranderd.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • BikkelZ
  • Registratie: Januari 2000
  • Laatst online: 21-02 08:50
In de debugger zie ik juist geen ander gedrag! :/

Ik ga Telerik eens mailen, zo gauw ik mijn login boven water heb :)

iOS developer


Acties:
  • 0 Henk 'm!

  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Dat panel wat je visible wilt zetten, dat staat los op je pagina? Je RadGrid werkt via AJAX zeg je? Je hebt dus geen volledige post-back?

Zit het probleem niet daarin, die panel word niet opnieuw gerenderd omdat hij buiten de AJAX call valt.

“Build a man a fire, and he'll be warm for a day. Set a man on fire, and he'll be warm for the rest of his life.”


Acties:
  • 0 Henk 'm!

  • BikkelZ
  • Registratie: Januari 2000
  • Laatst online: 21-02 08:50
Woy schreef op woensdag 15 juli 2009 @ 11:59:
Dat panel wat je visible wilt zetten, dat staat los op je pagina? Je RadGrid werkt via AJAX zeg je? Je hebt dus geen volledige post-back?

Zit het probleem niet daarin, die panel word niet opnieuw gerenderd omdat hij buiten de AJAX call valt.
*ding* *ding* *ding* 100 points d:)b

De koppeling moest via dit stukje design gedaan worden:

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
    <telerik:RadAjaxManager runat="server" ID="radAjax" DefaultLoadingPanelID="RadAjaxLoadingPanel1">
        <AjaxSettings>
            <telerik:AjaxSetting AjaxControlID="grdAvailableOfferings">
                <UpdatedControls>
                    <telerik:AjaxUpdatedControl ControlID="grdAvailableOfferings" />
                    <telerik:AjaxUpdatedControl ControlID="grdSelectedOfferings" />
                    <telerik:AjaxUpdatedControl ControlID="pnlRequirments" />
                </UpdatedControls>
            </telerik:AjaxSetting>
            <telerik:AjaxSetting AjaxControlID="grdSelectedOfferings">
                <UpdatedControls>
                    <telerik:AjaxUpdatedControl ControlID="grdAvailableOfferings" />
                    <telerik:AjaxUpdatedControl ControlID="grdSelectedOfferings" />
                    <telerik:AjaxUpdatedControl ControlID="pnlRequirments" />
                </UpdatedControls>
            </telerik:AjaxSetting>
            <telerik:AjaxSetting AjaxControlID="pnlRequirments">
                <UpdatedControls>
                    <telerik:AjaxUpdatedControl ControlID="grdAvailableOfferings" />
                </UpdatedControls>
            </telerik:AjaxSetting>
        </AjaxSettings>
    </telerik:RadAjaxManager>


pnlRequirments zat er eerst dus niet in. Bedankt voor het meedenken :)

Ik gebruikte eerst ook nog een UpdatePanel om het hele gebeuren heen, waardoor ik dacht dat ik Ajax uitgeschakeld had door die weg te halen.

iOS developer

Pagina: 1