21. januar 2007 - 16:17
Der er
20 kommentarer og 1 løsning
ArrayList med linkbuttons skal vises i DataGrid (VB)
Jeg har en arraylist fyldt med dynamisk oprettede linkbuttons (som obj.), jeg gerne vil have vist i et datagrid. Hvordan gør jeg det smartest? Mvh Morch
Annonceindlæg fra DE-CIX
21. januar 2007 - 16:21
#1
ved ikke.. måske kan man gøre sådan foreach(LinkButton button in dinArrayList) { tilføj button til dit datagrid }
21. januar 2007 - 16:24
#2
Nix - er prøvet - viser : System.Web.UI.WebControls.LinkButton i hver celle
21. januar 2007 - 16:35
#4
Jeg mener at du skal konvertere dem, da de i en ArrayList er af typen "object".. Eksempel: foreach(LinkButton button in dinArrayList) { (LinkButton)button }
21. januar 2007 - 16:37
#5
thesurfer >> hmm.. er de ikke allerede sorteret når man bruger en foreach og angiver de objekter man vil have ud?
21. januar 2007 - 16:37
#6
undskyld.. allerede typecastet.
21. januar 2007 - 16:41
#7
Det tror jeg ikke Hvis f.eks. putter en ArrayList A i en ArrayList B, skal du typecaste ArrayList A før du kan bruge den, som en ArrayList..
21. januar 2007 - 16:45
#8
Eksempel: ArrayList fornavn = new ArrayList(); ArrayList efternavn = new ArrayList(); ArrayList navn = new ArrayList(); fornavn.Add("Hans"); efternavn.Add("Hansen"); navn.Add(fornavn); navn.Add(efternavn); Hvis man nu skulle trække fornavn og efternavn ud af navn, skal man typecaste det til ArrayLists: ArrayList f = (ArrayList)navn[0]; ArrayList e = (ArrayList)navn[1]; Messeagebox.Show("Fornavn: " + f.ToString() + ", efternavn: " + e.ToString()); Koden er skrevet direkte ind på Eksperten, så der kan sagtens være fejl.. :-)
21. januar 2007 - 16:45
#9
thesurfer >> hvis det er rigtig så er foreach jo ret primitiv på det område. jeg tror heller ikke at det er rigtig... man skriver jo LinkButton button så button er en ref. til LinkButton.. giver ikke mening at typecaste på det synes jeg
21. januar 2007 - 16:49
#10
Det kan godt være, at jeg blander Foreach og For sammen.. :-)
21. januar 2007 - 16:49
#11
thesurfer >> med for løkken har du helt ret:) der ville jeg også typecaste;o)
21. januar 2007 - 17:33
#12
Dim obj As [Object] Som jeg skrev i overskriften tale jeg VB, så derfor nedenstående: Dette: Dim i As Integer = 0 Dim j As Integer = 0 Dim raekke = datatabel.NewRow() Dim lkb As LinkButton For Each lkb In linkArr raekke(j) = CType(linkArr(i), LinkButton) i = i + 1 j = j + 1 Next resulterer i dette: System.Web.UI.WebControls.LinkButton System.Web.UI.WebControls.LinkButton 365 gange. (Det er en kalender ting, der skal vise 12 mdr., jeg arbejder på)
21. januar 2007 - 17:41
#13
Glem den øverste linie i forrige indlæg. Jeg kan måske reformulere: Jeg laver en loop, der laver en måneds datoer - checker den enkelte dato i en database - findes den i db og er den = 1 skal der laves en linkbutton med et CommandName - hvis = 0 vises dagnummer med en anden CommandName til senere brug i et datagrid . Det samler jeg så op i en arrayList. Når loop´en så er færdig vil jeg vise skidtet i et datagrid. How to do eller en helt anden løsning (Jeg har højst sandsynligt stirret mig blind) Mvh Morch
23. januar 2007 - 00:17
#14
Øhhh - har jeg sagt noget forkert, eller er dette ikke længere interessant? Mvh morch
23. januar 2007 - 00:44
#15
Det ved jeg ikke :-) Jeg programmerer i C#, og ikke VB.NET.. Jeg tror at problemet er, at du tilføjer objektet til datagrid, og ikke indholdet.. Eksempel med C# kode: ArrayList a = new ArrayList(); a.Add("test"); Udskrift: a.ToString() Resultat: System.Collection.ArrayList (eller noget i den stil) Udskrift: a[0].ToString() Resultat: "test" På samme måde, skal du have fat i "indholdet" af System.Web.UI.WebControls.LinkButton.. tror jeg.. :-)
23. januar 2007 - 00:46
#16
Dvs, du skal lave noget der ligner: For Each lkb In linkArr LinkButton tmp = CType(linkArr(i), LinkButton) raekke(j) = tmp.Name i = i + 1 j = j + 1 Next Læg mærke til ".Name": raekke(j) = tmp.Name Det kan også være, at det er en anden property du vil have fat i.. f.eks. HREF/LINK eller hvad den nu hedder..
23. januar 2007 - 00:49
#17
Eksempel med C#: private string navn = ""; public MinKlasse(string navn) { this.navn = navn; } public Navn { get { return this.navn; } set { this.navn = value; } } Og formen/consolen: MinKlasse mk = new MinKlasse("Hans"); Console.WriteLine(mk) --> udskriver "MinKlasse" (som er typen) Console.WriteLine(mk.Navn) --> udskriver "Hans" da det er indholdet af propertien "Navn" Jeg håber at det leder dig på rette spor..
23. januar 2007 - 08:05
#18
Det virker også fint derhen, at jeg får værdien ind i datagrid, men jeg skal også have linket med - gerne som en linkbutton med en command. Jeg havde allerede lavet noget, hvor jeg bare satte almindelige links ind fra et array, men burde det ikke være muligt, at sætte objekterne in i hver ´´celle´´ i datagriddet?
25. januar 2007 - 12:31
#19
Jeg har ikke arbejdet med datagrids, så jeg ved ikke om det er muligt.. Jeg kan muligvis kigge på det, når jeg engang har installeret Windows+programmer igen..
25. januar 2007 - 12:34
#20
Jeg giver op og finder en anden løsning
25. januar 2007 - 16:15
#21
Er det sådan noget her du er ude efter: public partial class _Default : System.Web.UI.Page { List<LinkButton> linkbuttons = new List<LinkButton>(); protected void Page_Load(object sender, EventArgs e) { LinkButton lb = new LinkButton(); lb.Text = "Et eller andet link"; lb.PostBackUrl = Request.RawUrl; linkbuttons.Add(lb); lb = new LinkButton(); lb.Text = "Et eller andet link"; lb.PostBackUrl = Request.RawUrl; linkbuttons.Add(lb); lb = new LinkButton(); lb.Text = "Et eller andet link"; lb.PostBackUrl = Request.RawUrl; linkbuttons.Add(lb); DataGrid grid = new DataGrid(); grid.DataSource = linkbuttons; grid.ItemDataBound += new DataGridItemEventHandler(grid_ItemDataBound); grid.DataBind(); Form.Controls.Add(grid); } void grid_ItemDataBound(object sender, DataGridItemEventArgs e) { if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem) { TableCell tc = new TableCell(); tc.Controls.Add(linkbuttons[e.Item.ItemIndex]); e.Item.Cells.Add(tc); } } } Mvh
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.