Avatar billede morch Nybegynder
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
Avatar billede kalp Novice
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
}
Avatar billede morch Nybegynder
21. januar 2007 - 16:24 #2
Nix - er prøvet - viser :

System.Web.UI.WebControls.LinkButton i hver celle
Avatar billede kalp Novice
21. januar 2007 - 16:34 #3
der skal også lidt mere til for at smide et objekt ind.. se hvordan det bliver gjort her med en knap
http://www.i-syn.gmxhome.de/devcom/colstyles/controlbutton.htm
Avatar billede thesurfer Nybegynder
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
}
Avatar billede kalp Novice
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?
Avatar billede kalp Novice
21. januar 2007 - 16:37 #6
undskyld.. allerede typecastet.
Avatar billede thesurfer Nybegynder
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..
Avatar billede thesurfer Nybegynder
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.. :-)
Avatar billede kalp Novice
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
Avatar billede thesurfer Nybegynder
21. januar 2007 - 16:49 #10
Det kan godt være, at jeg blander Foreach og For sammen.. :-)
Avatar billede kalp Novice
21. januar 2007 - 16:49 #11
thesurfer >>

med for løkken har du helt ret:) der ville jeg også typecaste;o)
Avatar billede morch Nybegynder
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å)
Avatar billede morch Nybegynder
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
Avatar billede morch Nybegynder
23. januar 2007 - 00:17 #14
Øhhh - har jeg sagt noget forkert, eller er dette ikke længere interessant?

Mvh

morch
Avatar billede thesurfer Nybegynder
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.. :-)
Avatar billede thesurfer Nybegynder
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..
Avatar billede thesurfer Nybegynder
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..
Avatar billede morch Nybegynder
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?
Avatar billede thesurfer Nybegynder
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..
Avatar billede morch Nybegynder
25. januar 2007 - 12:34 #20
Jeg giver op og finder en anden løsning
Avatar billede snepnet Nybegynder
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
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester