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
Annonceindlæg fra Computerworld
Geopolitik i cyberspace
Mark Fiedel i Styrelsen for Samfundssikkerhed påpeger behovet for, at Danmark kigger kritisk på leverandørafhængighed.
13. juni 2025
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
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
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. //--
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.