IsPostBack?

Written on September 12, 2003

In der ASP.NET-Mailingliste sowie einschlägig bekannten ASP.NET-Foren taucht häufiger folgendes Problem im Zusammenhang mit datengebundenen Controls wie dem DataGrid, DataList etc. auf:

Man bindet im Page_Load die Datenquelle an das gewünschte Control und zeigt das Control an:

1: private void Page_Load(object sender, System.EventArgs e)

2: {

3: myDataGrid.DataSource=GetDataFromDataSource();

4: myDataGrid.DataBind();

5: }

Implementiert man nun Funktionen, die die Daten im Control verändern und die Änderungen auch anzeigen sollen, z.B. beim Paging oder Sortieren im DataGrid, so kann es sein, daß das Control die Daten in unerwarteter Form anzeigt oder das Sortieren, Paging etc. schlicht nicht richtig funktioniert.

Der Grund hierfür ist, daß die Seite nach dem Postback - der z.B. beim nach dem Klick auf den Sortierbutton ausgelöst wird - die Methode Page_Load wieder ausführt und die ursprünglichen Daten erneut an das Control bindet. Das bedeuted, die Änderungen, die z.B. die Paging-Methode durchgeführt hatte, werden wieder überschrieben.

Abhilfe schafft eine simple if-Abfrage, die das Databinding in Abhängigkeit davon durchführt, ob ein PostBack durchgeführt wurde oder ob die Seite zum 1. Mal geladen wird:

1: private void Page_Load(object sender, System.EventArgs e)

2: {

3: if(!IsPostBack)

4: {

5: myDataGrid.DataSource=GetDataFromDataSource();

6: myDataGrid.DataBind();

7: }

8: }

Wie so oft gilt also auch hier: kleine Ursache - große Wirkung.