[ASP.NET] Datagrid problemen

Pagina: 1
Acties:

  • whoami
  • Registratie: December 2000
  • Laatst online: 21-08 22:54
Ik ben een aspx pagina aan het maken met een datagrid. Allemaal geen probleem, alles lukt enzo (ik heb dat al wel nog eens gedaan ;) ).

Ik heb echter ook een EditCommandColumn aan m'n datagrid hangen, en hier zit het probleem:
Als ik op de Edit-knop klik, dan reload mijn pagina, en krijg ik niks meer te zien.
Sterker zelfs, als ik een breakpoint zet in de EditCommand event-handler, zie ik dat die eventhandler nooit getriggerd wordt.
Zeer vreemd, want mijn code ziet er toch goed uit:

code:
1
2
3
4
5
6
7
8
9
10
11
12
private void Page_Load(object sender, System.EventArgs e)
{
  _userInfo  = (UserData)Session["UserData"];
  _rm      = (ResourceManager)Session["ResMan"];
            
  CreateContactsGrid();
            
  if( !this.IsPostBack )
  {             
      BindContactsGrid();
  }
}


code:
1
2
3
4
5
private void BindContactsGrid()
{
  dgContacts.DataSource = ContactData.SearchContacts ("", "", _userInfo.UserId);
  dgContacts.DataBind();            
}


code:
1
2
3
4
5
private void dgContacts_EditCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e)
{           
  dgContacts.EditItemIndex = e.Item.ItemIndex;              
  BindContactsGrid();
}


Nu, het vreemde is dat, als ik m'n Page_Load als volgt verander:
code:
1
2
3
4
5
6
7
8
9
10
private void Page_Load(object sender, System.EventArgs e)
{
  _userInfo  = (UserData)Session["UserData"];
  _rm      = (ResourceManager)Session["ResMan"];
            
  CreateContactsGrid();
            
  BindContactsGrid();

}

(Dus zonder check of er een postback plaatsvind), het dan wel allemaal zonder problemen werkt.
Ik zou het dus zo kunnen oplossen, maar dat vind ik niet goed. Ik wil nl. niet iedere keer als ik een postback heb, m'n datagrid-gegevens opnieuw gaan ophalen. Ik wil dat enkel doen als het nodig is, vandaar dat ik dus die BindContactsGrid ga gaan oproepen in m'n EditItemCommand method.

Wat ik nu echt wel heel vreemd vind, is dat bovenstaande code bij andere (eerdere) projecten van me wel gewoon gewerkt heeft. (Ok, ik maakte daar gewoon gebruik van DataLists, maar toch....)

Zie ik iets over het hoofd?

[ Voor 4% gewijzigd door whoami op 16-08-2003 15:44 ]

https://fgheysels.github.io/


  • whoami
  • Registratie: December 2000
  • Laatst online: 21-08 22:54
Ff een denkpiste:

Volgens mij heeft het te maken met het feit dat hij de viewstate verliest. (EnableViewstate staat nochtans op true).
Kan dit te maken hebben met het feit dat ik m'n datagrid at-runtime opbouw ? Ik doe dit nl. in de CreateContactsGrid method.

Die ziet er bv. als volgt uit:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
dgContacts.AutoGenerateColumns = false;

cEditButton = new EditCommandColumn();
            
cEditButton.ButtonType  = ButtonColumnType.PushButton;
cEditButton.EditText    = _rm.GetString("xedittext");           
cEditButton.CancelText  = _rm.GetString("xcanceltext");
cEditButton.UpdateText  = _rm.GetString("xupdatetext");
cEditButton.ItemStyle.Width = 30;                       
dgContacts.Columns.Add (cEditButton);

cColumn = new BoundColumn();
cColumn.DataField = "Familienaam";
cColumn.HeaderText = "Familienaam";
cColumn.ItemStyle.Width = 100;
dgContacts.Columns.Add (cColumn);

https://fgheysels.github.io/


Verwijderd

Klopt. Dynamisch geladen controls verliezen hun state op deze manier, en heeft als gevolg dat je de grid opnieuw moet vullen.

Misschien is de DynamicControlsPlaceholder interessant om na te kijken?