Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien

[.NET] gridview selectedrow text

Pagina: 1
Acties:

  • Predje
  • Registratie: December 2002
  • Laatst online: 03-03 11:55
Hey,

Ik zit al dagen vast op een lastig probleem.
Heb een GridView in een UpdatePanel (maakt niet uit want het werk niet met of zonder UpdatePanel).
Deze GridView heeft een OnSelectedIndexChanged en elke row heeft een SelectButton.

De data komt uit een database (MySql) en wordt gebind via de CodeBehind.
Nu probeer ik bij het aanklikken van een SelectButton de tekst uit een column te halen want deze bevat een nummer wat ik weer moet gebruiken om een andere GridView te vullen (Crediteuren > Facturen).

De tekst probeer ik tijdelijk alleen nog maar naar een Label te schrijven, maar het Label blijft altijd leeg.
Naar het GrivView schrijven gaat wel, dus ik weet dat ik de juiste index heb, etc.
Ik kan zelfs de "handmatig" geschreven cellwaarde weer wel ophalen.

Hieronder voorbeeld van het ophalen van de tekst.
code:
1
2
Label.Text = GridView1.SelectedRow.Cells(1).Text
GridView1.SelectedRow.Cells(1).Text = "test"

Aanvankelijk bevat de cell bijv "1234" en is het Label nog leeg.
Na 1 keer een row selecteren bevat de cell "test" en is het Label nog leeg.
Na 2 keer dezelfde row selecteren bevat de cell "test" en bevate het Label "test".

We kan me helpen aan een oplossing?

Alvast bedankt.

  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 14-05-2024

OZ-Gump

terug van weggeweest

Dit lijkt een typisch geval van onduidelijkheid over wanneer er wat gebeurt in een pagina, en hoe sluit mijn code daar bij aan...

Kijk eens naar de property IsPostback van het Page object, lees het overzicht van wanneer een pagina welke events aftrapt, en kijk eens kritisch naar waar jouw code staat. Ik denk dat je dan een heel eind kan komen.

[ Voor 9% gewijzigd door OZ-Gump op 19-07-2007 16:47 . Reden: nog een link toegevoegd ]

My personal website


  • Predje
  • Registratie: December 2002
  • Laatst online: 03-03 11:55
OZ-Gump schreef op donderdag 19 juli 2007 @ 16:45:
Dit lijkt een typisch geval van onduidelijkheid over wanneer er wat gebeurt in een pagina, en hoe sluit mijn code daar bij aan...

Kijk eens naar de property IsPostback van het Page object, lees het overzicht van wanneer een pagina welke events aftrapt, en kijk eens kritisch naar waar jouw code staat. Ik denk dat je dan een heel eind kan komen.
De IsPostBack is al gecontroleerd, de GridView wordt niet opnieuw opgehaald be een postback.

  • OZ-Gump
  • Registratie: November 2002
  • Laatst online: 14-05-2024

OZ-Gump

terug van weggeweest

Predje schreef op donderdag 19 juli 2007 @ 16:52:
[...]

De IsPostBack is al gecontroleerd, de GridView wordt niet opnieuw opgehaald be een postback.
Dat is in ieder geval goed nieuws ;)
Misschien kun je wat meer relevante code posten. Het wordt dan makkelijker een diagnose te stellen. Een oplossing als de mijne was dan wellicht niet aangedragen, omdat het al uit je code bleek.

Heb je al eens gedebugged in het ophalen van de waarde uit je cel? Heb je dan al rows in je GridView? En zo ja, staan daar ook al daadwerkelijk waardes in? Ik kan me er namelijk iets van herinneren dat die bij je pageload nog niet beschikbaar zijn. Misschien is in dat kader dat overzicht van die page lifecycle toch nog interessant...

My personal website


Verwijderd

code:
1
2
Label.Text = GridView1.SelectedRow.Cells(1).Text
GridView1.SelectedRow.Cells(1).Text = "test"


Label.Text = GridView1.SelectedRow.Cells(1).Text
GridView1.SelectedRow.Cells(1).Text = "test"

Aanvankelijk bevat de cell bijv "1234" en is het Label nog leeg.
Na 1 keer een row selecteren bevat de cell "test" en is het Label nog leeg.
Na 2 keer dezelfde row selecteren bevat de cell "test" en bevate het Label "test".

Dit stukje code heb je zeker in je Page_Load staan? Ook dit moet je in de OnSelectedIndexChanged event plaatsen.


Om je te helpen met het andere probleem waarbij de label leeg blijft hebben we meer informatie nodig. Hoe bind je de data in de codebehind aan de gridview en wanneer?

  • Predje
  • Registratie: December 2002
  • Laatst online: 03-03 11:55
nee, deze code wordt enkel uitgevoerd bij de OnSelectedIndexChanged van de GridView.
en het label is aanvankelijk leeg, geen probleem want ik weet dat deze pas een waarde zou moeten bevaten na aanroepen van OnSelectedIndexChanged.

On_Pageload haalt enkel 1 keer de data op, bind deze aan de gridview.

  • Mastermind
  • Registratie: Februari 2000
  • Laatst online: 29-11 15:35
Ik heb net ff gemaakt wat jij wil, en hier werkt het gewoon.

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack) BindGrid();
    }

    private void BindGrid()
    {
        int[] data = new int[] { 10, 20, 30, 40 };
        GridView1.DataSource = data;
        GridView1.DataBind();
    }

    protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
    {
        Label1.Text = GridView1.SelectedRow.Cells[1].Text;
        GridView1.SelectedRow.Cells[1].Text = "1337";
    }
}


Dus het ligt ergens anders aan.

  • Predje
  • Registratie: December 2002
  • Laatst online: 03-03 11:55
Dat is exact zoals ik het doe!
Hoe ziet je lay-out pagina eruit?
Misschien had het wat te maken met de AJAX die ik gebruik op de Gridview gebruik, maar ook zonder AJAX (atlas: UpdatePanel, ScriptManager) werkt het niet.

Zo f*cking raar maar weer :S

  • Predje
  • Registratie: December 2002
  • Laatst online: 03-03 11:55
Oplossing gevonden!:
Ik ben eens gaan testen op de lay-out pagina, in mijn GridView maak ik gebruik van TemplateFields i.p.v. BoundFields i.v.m. een custom opmaak die ik de tekst wil geven.

Na het lezen van wat artikelen over TemplateField en BoundField vond ik de volgende zin:
The TemplateField object is displayed differently depending on the data-bound control in which it is used. For example, the GridView control displays a TemplateField object as a column, and the DetailsView control displays it as a row.

Dus ik verander de TemplateField van het nummer in een BoundField (was voor dit ene veld totaal geen probleem) en prompt het werkt!
Dit is dus een oplossing die voor nu werkt, ik ga echter nog onderzoeken hoe ik het alsnog werkende kan krijgen met een TemplateField (misschien is met HTMLEncode ofzo of CType).

Iedereen bedankt voor de hulp.

  • Mastermind
  • Registratie: Februari 2000
  • Laatst online: 29-11 15:35
Als je een TemplateField wilt gebruiken, kun je er bijvoorbeeld een label inzetten en met FindControl het object vinden, casten naar een label en de Text waarde getten/setten.
Pagina: 1