09. maj 2005 - 12:53Der er
7 kommentarer og 1 løsning
DataGrid Kolonne Header
Hvordan kan jeg få fat i kolonne-headertext på et DataGrid hvor kolonnerne er autogenerede? Når der er autogenereret er Columns på DataGrid'et naturligvis null.
kolonneoverskrifterne sættes normalt til dine kolonnenavne (hvis det er en datatabel ell. du binder til)... får du ingen headertekster overhovedet ? (du må gerne lige skrive lidt om hvad du binder til etc). mvh
Hey. Jeg binder til en collection jeg selv har lavet. Dvs. ved autogenerate columns bliver kolonnerne lavet udfra de properties der er. Det jeg skal er at sætte nogle attributter ved bestemte kolonnenavne på hver enkelt række og det er lidt svært hvis jeg ikke kender kolonnenavnet.
du kan bare tage kolonnerne pr. index... så du i din ItemDataBound manipulere det du har behov for. (som du kan forstå er jeg ikke 100% sikker på at jeg har fanget hvad du vil :oD)
hvis du giver et konkret eksempel på hvad du præcist vil opnå - så skal du få et eksempel.
jeg giver dig et svar - så tror jeg der kommer en rude frem hvor du kan markere min navn og acceptere :o)
men bortset fra det, så er det relativt let at opbygge dit grid dynamisk (på dine premisser), frem for at sætte autogenerate til true.
du kan lige få et lamt (bare så du kan se teknikken) eksempel hvordan du kan gøre det med custom typer og attributter :
først en attribut (så vi kan angive om kolonnen er synlig eller ej) :
[AttributeUsage(AttributeTargets.Property)] public class GridColumnAttribute : Attribute { private ViewMode mode;
public ViewMode Mode { get{return mode;} }
public GridColumnAttribute(ViewMode mode) { this.mode = mode; } }
viewmode er bare sådan en her :
public enum ViewMode { Show, Hide }
så din egen type, hvor du klasker attributten på, hvor det nu passer sig :
public class SomeClass { [GridColumn(ViewMode.Show)] public string SomeString { get{return "String";} }
[GridColumn(ViewMode.Show)] public string SomeOtherString { get{return "OtherString";} } }
og du kan så opbygge et grid f.eks. sådan her :
// en liste til dine objekter ArrayList al = new ArrayList(); for(int i=0;i<10;i++) { al.Add(new SomeClass()); }
// et grid DataGrid dg = new DataGrid(); dg.AutoGenerateColumns = false; dg.DataSource = al;
// vi checker hvad der skal vises PropertyInfo[] pinfo = al[0].GetType().GetProperties(); foreach(PropertyInfo p in pinfo) { object[] attribs = p.GetCustomAttributes(typeof(GridColumnAttribute), false);
if(attribs.Length > 0) { GridColumnAttribute gca = (GridColumnAttribute)attribs[0]; if(gca.Mode == ViewMode.Show) { // indsætter kolonnen hvis attributten siger det BoundColumn bc = new BoundColumn(); bc.HeaderText = p.Name; bc.DataField = p.Name; bc.ItemStyle.BackColor = (Color) Enum.Parse(typeof(Color), gca.BgColor, true); dg.Columns.Add(bc); } } }
// binding, og ind på formen dg.DataBind(); Form1.Controls.Add(dg);
. . .
Måske et lidt fjollet eksempel - der er lettere veje til en usynlig kolonne, men du kan måske bruge det som inspiration til noget mere anvendeligt.
Det er i orden. Er noget lignende det dér jeg har gjort for at løse problemet. Takker.
Synes godt om
Ny brugerNybegynder
Din løsning...
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.