Avatar billede dennisjuul Nybegynder
29. september 2005 - 12:51 Der er 4 kommentarer og
1 løsning

Bruge repeater til at vise kolonner

Hejsa!

Jeg skal vise en eller flere oplysninger fra en database i en repeater.

De viste data skal vises i tre kolonner og skal tilpasses alt efter hvor mange oplysninger der vælges (via checkbokse).

Dvs. vælges fire oplysninger, skal de tre første vises i første række og den fjerde i anden række.

Nogle forslag?

//dennisjuul
Avatar billede snepnet Nybegynder
30. september 2005 - 07:23 #1
det lyder som om du vil sætte det ind dynamisk, såhh et lille eksempel:

// din repeater:
<asp:Repeater ID="rep" runat="server" OnItemDataBound="rep_ItemDataBound" />


// lidt data
ArrayList list = new ArrayList();
list.Add(new SomeClass(new string[] { "Hej", "med", "dig" }));
list.Add(new SomeClass(new string[] { "Hej", "med"}));
list.Add(new SomeClass(new string[] { "Hej", "med", "dig", "du" }));
list.Add(new SomeClass(new string[] { "Hej", "med", "dig", "du", "gamle","svinger" }));

// databinding
rep.DataSource = list;
rep.DataBind();

// med SomeClass sådan her:
public class SomeClass
{
    private string[] _strings;

    public string[] Strings
    {
        get { return _strings; }
        set { _strings = value; }
    }

    public SomeClass(string[] strings)
    {
        _strings = strings;
    }
}

// og handleren af ItemDataBound-eventet
protected void rep_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    SomeClass data = e.Item.DataItem as SomeClass;
    int index = 0;
    foreach(string s in data.Strings)
    {
        TextBox tb = new TextBox();
        tb.Text = s;
        e.Item.Controls.Add(tb);
        if (index > 0 && index++ % 3 == 0)
        {
            e.Item.Controls.Add(new LiteralControl("<br />"));
        }           
    }
    e.Item.Controls.Add(new LiteralControl("<hr />"));
}

så sætter du bare tekstbokse ind - og skifter linie efter 3 stykker.

mvh
Avatar billede dennisjuul Nybegynder
30. september 2005 - 09:14 #2
Tak for det, snepnet.

Jeg måtte dog lige tilføje et par linier i rep_ItemDataBound før det virkede.
I foreach løkken, manglede der en optælling samt nulstilling af index:

foreach(string s in data.Strings)
{
  TextBox tb = new TextBox();
  tb.Text = s;
  e.Item.Controls.Add(tb);
  if (index > 0 && index++ % 3 == 0)
  {
      e.Item.Controls.Add(new LiteralControl("<br />"));
      index = 0; //TILFØJET!
  }
  else index++; //TILFØJET!
}

Men hvis du smider et svar, så er der point. :-D

//dennisjuul
Avatar billede snepnet Nybegynder
01. oktober 2005 - 19:36 #3
et svar kommer her :o)

forstår ikke helt at det ikke virkere ?!? - det var ellers helt klart planen :oD

mvh

//--
der er optælling i selv løkken (index++) og den sætter et break ind hvis division med 3 ikke giver nogen rest (% 3 == 0), hvilket vil sige at du får et break på 3/6/9/12/osv.... så du må ikke nulstille tælleren.

egentlig ville denne her nok være mere mere korret at skrive:
if(++index % 3 == 0)

den kode du skrev vil tælle index op to gange, når division med 3 ikke giver nogen rest - og det ser umiddelbart forkert ud i forhold til din beskrivelse synes jeg.
//--
Avatar billede dennisjuul Nybegynder
02. oktober 2005 - 11:32 #4
Du har ret, hvis jeg i koden undlader at måle på om (index > 0) og samtidig laver betingelsen om til (++index % 3 == 0) så virker det efter hensigten.

Point givet.
Avatar billede snepnet Nybegynder
03. oktober 2005 - 21:43 #5
håber det holder :o)
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