Toon posts:

[C#] gridView kolommen aanmaken via code-behind

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik wil een gridView gebruiken om een gebruiker zaken te laten aanpassen. Die gridView wordt opgevlud met een DataSet. Een aantal kolommen van die DataSet moet echter weergegeven worden als TemplateColumn.

Het probleem is nu dat dit aantal kolommen niet vooraf vastligt. Het gaat namelijk om kolommen die verschillende talen moeten voorstellen, maar die talen kunnen aangepast worden in de database. Het kan dus voorkomen dat er een nieuwe taal bij komt, of een bestaande taal verdwijnt.

Aangezien ik alle talen als TemplateColumns wil weergeven, en niet op de standaard manier, moet ik "Auto Generate Columns" wel uitschakelen. Maar aangezien het aantal TemplateColumns niet vast ligt, kan ik ze ook niet zo eenvoudig aanmaken.

Ik ben dus op zoek naar hoe ik extra TemplateColumns kan aanmaken in de gridView, vanuit de code-behind. Zo kan ik met een eenvoudige code bepalen hoeveel kolommen ik moet aanmaken, en het correcte aantal invoeren. Is dit mogelijk? Of wil ik te veel bereiken?

  • MrBucket
  • Registratie: Juli 2003
  • Laatst online: 29-10-2022
Aangezien je niet aangeeft om welke ASP.NET het gaat, ga ik ervan uit dat je de DataGrid uit .NET 1.1 gebruikt.

Uit http://msdn2.microsoft.co...rols.datagrid(vs.71).aspx:
By default, the AutoGenerateColumns property is set to true, which creates a BoundColumn object for each field in the data source. Each field is then rendered as a column in the DataGrid control in the order that each field appears in the data source.

You can also manually control which columns appear in the DataGrid control by setting the AutoGenerateColumns property to false and then listing the columns that you want to include between the opening and closing <Columns> tags. The columns specified are added to the Columns collection in the order listed. This allows you to programmatically control the columns in the DataGrid control.
Oftewel: je moet de Columns property op je DataGrid gebruiken. Daar zit onder meer een Add()-methode op om nieuwe kolommen toe te voegen. :)

--edit
Ik zie dat .NET 2.0 wel een GridView heeft. Bovenstaande instructies zijn ook hierop van toepassing: Een GridView heeft ook een Columns property waarmee je de collectie van columns kan bewerken.

[ Voor 9% gewijzigd door MrBucket op 16-04-2007 19:23 ]


Verwijderd

Topicstarter
Bedankt, daar was ik dus inderdaad naar op zoek. Rest mij enkel nog het probleem om er content in te krijgen. Blijkbaar kan je niet zomaar
code:
1
TemplateField.ItemTemplate = "blabla";

gebruiken, maar moet de rechterzijde van het type System.Web.UI.ITemplate zijn...en daar vind ik de MSDN nogal héél onduidelijk over. Heb je misschien een voorbeeldje of zo van hoe je nu makkelijk content in de template kan krijgen?

(ik gebruik dus ASP.NET 2.0, sorry dat ik dit niet vermeld heb)

  • MrBucket
  • Registratie: Juli 2003
  • Laatst online: 29-10-2022
Ik heb een voorbeeldje gevonden wat je (denk ik) weer een stukje verder zou moeten helpen:
How to: Create Templated ASP.NET User Controls.

Ik moet bekennen dat ik zelf niet genoeg in ASP.NET 2.0 zit om je hier 1-2-3 een antwoord op te kunnen geven. Succes ermee in ieder geval :)

  • Mastermind
  • Registratie: Februari 2000
  • Laatst online: 29-11 15:35
Maak een gridview GridView1 aan met een template column. In deze template column maak je een Panel, genaamd customPanel

Maak dan een eventhandler RowDataBound van de GridView1, en voeg daar dynamisch controls toe. Dan krijg je zoiets:

C#:
1
2
3
4
5
6
7
8
9
10
11
protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
Panel customPanel = (Panel)e.Row.FindControl("customPanel");
Label[] label = new Label[talenFields.Count];
for (int i = 0; i < talenFields.Count; i++)
{
Label label[i] = new Label();
label[i].Text = talenFields[i].TaalNaam;
customPanel.Controls.Add(label[i]);
}
}


Je kunt nog wat properties als Width erbij zetten enz.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 08:30

gorgi_19

Kruimeltjes zijn weer op :9

@Mastermind:
En bij een PostBack is dan alles weg :+

@MrBucket: Zo te zien is dat een ander voorbeeldje, die van een ASP.Net UserControl en niet voor een ItemTemplate als in een repeater, gridview, etc. :P .Net gebruikt een ItemTemplate voor nogal veel dingen :P

[ Voor 75% gewijzigd door gorgi_19 op 17-04-2007 08:38 ]

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Mastermind
  • Registratie: Februari 2000
  • Laatst online: 29-11 15:35
Ja dan moet je in de PageLoad nog ff een BindGridView(); doen.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 08:30

gorgi_19

Kruimeltjes zijn weer op :9

Mastermind schreef op dinsdag 17 april 2007 @ 08:57:
Ja dan moet je in de PageLoad nog ff een BindGridView(); doen.
Dan blijf je binden, ook niet echt goed voor je performance als je steeds data uit je database wilt ophalen :) Je kan de boel 'scheiden'; altijd je controlcollection op orde brengen en alleen bij het binden de controls vullen :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • Mastermind
  • Registratie: Februari 2000
  • Laatst online: 29-11 15:35
Maarja, hij wil dynamisch kolommen toevoegen, en in dat geval zul je altijd moeten kijken of er iets veranderd is. In het andere geval idd bij !IsPostBack een Collection maken en daar slechts aan binden als een relevant event geinvoked wordt.
Pagina: 1