[ASP.NET] Kolom verbergen dynamische DataGrid

Pagina: 1
Acties:

  • hiostu
  • Registratie: Juli 2000
  • Laatst online: 05-05 13:13
Ik heb het volgende probleem. Ik heb een dataview die gekoppeld is aan een DataGrid. Echter 1 van de kolommen wil ik verbergen.

De DataView geeft echter niet altijd dezelfde kolommen terug en is dus dynamisch.

Doordat de DataGrid at runtime zijn kolommen zelf genereerf gaat het fout als ik een kolom op visible=false wil zeten.

Nu heb ik zelf met een lus BoundColumns toegevoegd voor elke kolom die in de DataView zit. En tijdens het maken van de BoundColumns de juiste op visible=false gezet.

Echter na een post-back waarin ik mijn DataGrid opnieuw DataBind() aan mijn DataView, verdwijnt mijn datagrid. Ook als ik de laatste opsla in de sessie en bij de postback weer terughaal.

Wat is nu de beste aanpak om verder te gaan kijken. Is de aanpak met BoundColumns op de goede weg, of is dat niet echt netjes om te doen.

  • whoami
  • Registratie: December 2000
  • Laatst online: 00:40
Je moet je DataGrid bij iedere postback opnieuw gaan creeëren, dwz, na iedere postback moet je de columns opnieuw toevoegen.

Je kan dus beter 2 methods maken:
- eentje waarin je de datagrid 'creeërt'
- eentje waarin je de datasource bindt aan de datagrid:

bv:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
private void CreateDataGrid()
{
     BoundColumn bc = new BoundColumn();
     bc.DataField = "naam";
     ....
     myDataGrid.Columns.Add (bc);
     ....
}

private void BindDataGrid()
{
      myDataGrid.DataSource = aDataSet;
      myDataGrid.DataBind();
}


Op die manier kan je makkelijk je grid hercreeëren als je opnieuw moet binden:
code:
1
2
CreateDataGrid();
BindDataGrid();

https://fgheysels.github.io/


Verwijderd

Je kunt er ook in je init methode naar verwijzen:
Visual Basic .NET:
1
2
3
4
5
Private Sub Page_Init(...) Handles MyBase.Init
         'Do not modify it using the code editor.
        InitializeComponent()        
         CreateDataGrid()
End Sub

Je moet er wel voor zorgen dat EnableViewState op True staat. Anders wil je datagrid wel eens verdwijnen.

  • sander_g
  • Registratie: Juli 2002
  • Laatst online: 27-05 16:48
Misschien is dit handig:

code:
1
2
3
4
5
6
<asp:DataGrid id="Datagrid1" runat="server" AutoGenerateColumns="True" 
   OnItemDataBound="Datagrid1_OnItemDataBound"/>

Private Sub DataGrid1_ItemDataBound(s As Object, e As DatagridItemEventArgs)
  e.Item.Cells(1).Visible = False
End Sub


Zo wordt in het OnItemDataBound event de methode DataGrid1_ItemDataBound uitgevoerd.

(bron: http://www.datagridgirl.com/faq.aspx)

Garmin Fēnix 7 Pro | https://www.strava.com/athletes/30783039


  • hiostu
  • Registratie: Juli 2000
  • Laatst online: 05-05 13:13
oh ok, dan ga ik dan morgen ochtend eerste werk even proberen. Bedankt

  • hiostu
  • Registratie: Juli 2000
  • Laatst online: 05-05 13:13
Ok het werkt nu goed, door idd altijd die bound columns toe te voegen.

Ik vind het alleen raar dat als ik de Grid in de Sessie zet en bij een postback er weer uithaal, de Grid niet goed is. Dat zou toch in principe moeten werken.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 22:24

gorgi_19

Kruimeltjes zijn weer op :9

hiostu schreef op 25 februari 2004 @ 10:25:
Ik vind het alleen raar dat als ik de Grid in de Sessie zet en bij een postback er weer uithaal, de Grid niet goed is. Dat zou toch in principe moeten werken.
Nee, want je voor wijzigingen uit in de controlcollection en die voor je niet consequent door.

Digitaal onderwijsmateriaal, leermateriaal voor hbo

Pagina: 1