22. april 2007 - 21:12Der er
5 kommentarer og 1 løsning
DataGrid: Link på column header
Til alle ASP.NET hajer: Jeg har brug for lidt hjælp til at oprette et DataGrid 100% dynamisk, som får myDataGrid.DataSource fra en DataTable. myDataGrid tilføjes en PlaceHolder som -> placeHolder.Controls.Add(myDataGrid);
Det DataGrid som jeg vil lave ser ud som nedenstående tabel - jeg har brug for hjælp til at gøre header'en (som er understreget) click'able/link som fyrer en event, hvorfra jeg kan få nummeret på den kolonne som der er blevet klikket på (fx kolonne nr.1 som har navnet Bookingklasse).
Som udgangspunkt vil jeg nok foreslå dig at kigge på et gridview i asp.net 2.0, men du burde kunne får kolonnen clickable ved at angive AllowSorting = true, og sætte et SortExpression på hver kolonne.
Du kan så abbonnere på SortCommand-eventet og få det respektive sortexpression direkte på den DataGridSortCommandEventArgs instans du "får i hånden".
Såh... Noget i denne stil, hvis det skal være dynamisk:
DataGrid grid = new DataGrid(); grid.AllowSorting = true; grid.SortCommand += new DataGridSortCommandEventHandler(grid_SortCommand);
BoundColumn c = new BoundColumn(); c.DataField = "SomeProperty"; c.HeaderText = "header"; c.SortExpression = "SomeProperty"; grid.Columns.Add(c);
grid.DataSource = GetData(); // formodes så at returnere noget med en SomeProperty grid.DataBind();
Og din handler til SortCommand: void grid_SortCommand(object source, DataGridSortCommandEventArgs e) { Response.Write(e.SortExpression); }
Ikke at den kan bruges til noget - det er bare for at du kan se hvordan du får fat i sortexpression.
Ja, det virker. Men jeg får to ens kolonner ... kan ikke helt gennemskue hvad jeg gør galt. Måske du vil tage et kig - på nedenstående kode får jeg følgende kolonner |ID|NAME|ID|NAME|
public partial class DataGridSort : System.Web.UI.Page { #region constants const string NAME = "NAME"; const string ID = "ID"; #endregion
void loadDynamicGrid() { #region Code for preparing the DataTable //Create an instance of DataTable DataTable dt = new DataTable();
//Create an ID column for adding to the Datatable DataColumn dcol = new DataColumn(ID, typeof(System.Int32)); dcol.AutoIncrement = true; dt.Columns.Add(dcol);
//Create an ID column for adding to the Datatable dcol = new DataColumn(NAME, typeof(System.String)); dt.Columns.Add(dcol);
//Now add data for dynamic columns //As the first column is auto-increment, we do not have to add any thing. //Let's add some data to the second column. for (int nIndex = 0; nIndex < 10; nIndex++) { //Create a new row DataRow drow = dt.NewRow();
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.