Toon posts:

[C#] Headertemplate(Label) vullen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik heb een dropdownlist en een datagrid.
Wanneer een waarde uit een dropdownlist is geselecteerd moet deze waarde in de headertemplate van het grid worden geplaatst.
het label in de headerTemplate heet l_naam

Wat heb ik o.a. tot nu toe geprobeerd:
code:
1
Label l_gebruiker = (Label)DataGrid1.FindControl("l_naam");


Alternatief:

code:
1
2
3
4
5
6
DataGrid1.Columns[0].HeaderText = "Gebruikernaam <br>" + ddl_regnummer.SelectedItem.Text;
DataTable dt = new DataTable();
DataGrid1.DataSource = dt;              
DataGrid1.DataBind();

Dit werkt, maar vind ik niet zo netjes.



Maar bij FindControl returned ie NULL.
Hoe kan ik dan toch het label l_naam vinden en vullen?

[ Voor 18% gewijzigd door Verwijderd op 11-12-2003 11:19 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 15:14
Bij FindControl returned ie NULL, omdat die control niet bestaat op de DataGrid. Die control bestaat wel in een data-item.
Jouw alternatief is afaik de enige manier om hetgeen jij wilt te verwezenlijken.

Je kan wel in de OnItemDataBound event aan de header. Die event wordt getriggerd als je je DataGrid opnieuw DataBind().
Je kan dan bv volgende code opnemen:
code:
1
2
3
4
5
6
private void DataGrid1_DataBound(object sender, DataGridEventArgs e)
  if( e.Item.ItemType == ItemType.Header )
  {
      Label l1 = (Label)e.Item.FindControl("controlnaam");
      l1.Text = "blaat";
  }

https://fgheysels.github.io/


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
Als je je DataGrid niet opnieuw wil databinden kan je natuurlijk ook handmatig ( Door de computer dan :P ) door de de Items collection van de DataGrid kunnen lopen. Het lijkt me dat de HeaderTemplate altijd op ItemIndex 0 terecht komt dus dan zou je mischien zoiets kunnen doen
C#:
1
DataGrid.Items[ 0 ].FindControl( "Naam" );

Heb dit overigens niet getest.

“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.”


  • whoami
  • Registratie: December 2000
  • Laatst online: 15:14
rwb schreef op 11 december 2003 @ 11:29:
Als je je DataGrid niet opnieuw wil databinden kan je natuurlijk ook handmatig ( Door de computer dan :P ) door de de Items collection van de DataGrid kunnen lopen. Het lijkt me dat de HeaderTemplate altijd op ItemIndex 0 terecht komt dus dan zou je mischien zoiets kunnen doen
C#:
1
DataGrid.Items[ 0 ].FindControl( "Naam" );

Heb dit overigens niet getest.
Nee, dat dacht ik eerst ook, maar ik heb het ff opgezocht in de help.
De Items collectie bevat de Header en Footer niet, enkel de items die werkelijk gedatabinded zijn.
Note Only items bound to the data source are contained in the Items collection. The header, footer, and separator are not included in the collection.

https://fgheysels.github.io/


Verwijderd

Topicstarter
whoami schreef op 11 december 2003 @ 11:20:
Bij FindControl returned ie NULL, omdat die control niet bestaat op de DataGrid. Die control bestaat wel in een data-item.
Jouw alternatief is afaik de enige manier om hetgeen jij wilt te verwezenlijken.

Je kan wel in de OnItemDataBound event aan de header. Die event wordt getriggerd als je je DataGrid opnieuw DataBind().
Je kan dan bv volgende code opnemen:
code:
1
2
3
4
5
6
private void DataGrid1_DataBound(object sender, DataGridEventArgs e)
  if( e.Item.ItemType == ItemType.Header )
  {
      Label l1 = (Label)e.Item.FindControl("controlnaam");
      l1.Text = "blaat";
  }
Ik vind dit persoonlijk een mooiere oplossing.
Ik denk dat ik inderdaad een OnItemDataBound ga gebruiken om de gegevens op te halen. Thanx

  • whoami
  • Registratie: December 2000
  • Laatst online: 15:14
Verwijderd schreef op 11 december 2003 @ 11:32:
[...]


Ik vind dit persoonlijk een mooiere oplossing.
Ik denk dat ik inderdaad een OnItemDataBound ga gebruiken om de gegevens op te halen. Thanx
Je moet wel in het achterhoofd houden, dat die event altijd (en alleen maar) getriggered wordt, als je de DataBind() method oproept van de datagrid.

https://fgheysels.github.io/


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 13:28

gorgi_19

Kruimeltjes zijn weer op :9

whoami schreef op 11 december 2003 @ 11:35:
[...]


Je moet wel in het achterhoofd houden, dat die event altijd (en alleen maar) getriggered wordt, als je de DataBind() method oproept van de datagrid.
Oftewel: Je moet je datagrid dus opnieuw binden in de handler van het SelectedIndexChanged-event van je dropdownlist :P

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Woy
  • Registratie: April 2000
  • Niet online

Woy

Moderator Devschuur®
whoami schreef op 11 december 2003 @ 11:30:
[...]


Nee, dat dacht ik eerst ook, maar ik heb het ff opgezocht in de help.
De Items collectie bevat de Header en Footer niet, enkel de items die werkelijk gedatabinded zijn.

[...]
Hmm dat vindt ik wel vreemd. Ik vondt het eerst al vreemd dat voor De header en footer het OnItemDataBound event werdt aangeroepen ( Na een paar null pointers kwam ik daar pas achter ). Maar door dat event voor de Header en Footer te firen vindt ik eigenlijk dat je aangeeft dat het een Item is ( Alleen dan zonder DataItem ). Dan zou je hem ook in de Items collection moeten hebben.

Maar even daarbuiten, dan zou je hem als het goed is nog wel op kunnen zoeken in de Controls collection lijkt me. Als je toch opnieuw gaat databinden is het natuurlijk het makkelijkst om het in de OnItemDataBound event te doen.

“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.”

Pagina: 1