Avatar billede mathiasiversen Nybegynder
23. august 2004 - 15:22 Der er 23 kommentarer og
1 løsning

Style TextBox control i en repeater control

Hej

Er der nogen der ved hvordan man styler f.eks. en TextBox inden i en repeater control. Det skal gøres fra selve koden, sådan som man normal gør med en anden control:

textBox.BorderColor = Color.FromName(strBoxColor.ToString());

Håber at der er nogen der kan hjælpe mig.

/Mathias
Avatar billede snepnet Nybegynder
23. august 2004 - 15:25 #1
hvis du vil putte regulære styles på kan det gøres med
textbox.Style.Add("...","...");
og du kan sætte en class med
textbox.CssClass = "..."
Avatar billede snepnet Nybegynder
23. august 2004 - 15:26 #2
Ahh... tror lige jeg misforstod problemet der.
Du kan gøre ved at overskrive ItemCreated, eller ItemDataBound.

Så kan du tage fat i kontrollen derindefra og gøre med den hvad du vil.
Avatar billede mathiasiversen Nybegynder
23. august 2004 - 15:28 #3
Den er jeg ikke helt med på.
Avatar billede snepnet Nybegynder
23. august 2004 - 15:28 #4
hvis du har givet din textbox et id, kan du finde den i f.eks. itemdatabound med
e.Item.FindControl(<id>);
og du vil kunne gøre noget ved din tekstboks ved
TextBox tb = (TextBox)e.Item.FindControl(<id>);
tb..... hvad du nu vil.
Avatar billede snepnet Nybegynder
23. august 2004 - 15:29 #5
hvilket udviklingsmiljø bruger du ?
Avatar billede mathiasiversen Nybegynder
23. august 2004 - 15:31 #6
Asp.net Web Matrix
Avatar billede snepnet Nybegynder
23. august 2004 - 15:33 #7
så klikker du bare på repeateren i designeren. i dit propertyvindue kan du se et lille lyn øverst.
hvis du klikker på det, fremkommer de events du kan abbonere på. Der dobbeltklikker du så på f.eks. ItemDataBound, og du får derved oprettet en handler til det event.a
Avatar billede snepnet Nybegynder
23. august 2004 - 15:35 #8
du har en argument til rådighed i den handler der bliver oprettet til dig (e), og du kan via det trævle det aktuelle repeateritem op, og du kan gøre f.eks. det her :

TextBox tb = (TextBox)e.Item.FindControl(<id>);
Avatar billede mathiasiversen Nybegynder
23. august 2004 - 15:39 #9
Jep jep, jeg er med nu, men umiddelbart sker der ikke så meget. Har overskrevet eventhandleren nu, men mine tekstbokse ændre ikke farve, som jeg har sagt de skal.
Avatar billede snepnet Nybegynder
23. august 2004 - 15:43 #10
smid lige lidt kode så jeg kan se hvad der sker.
gerne din template, og din eventhandler hvor du prøver at ændre style.
Avatar billede mathiasiversen Nybegynder
23. august 2004 - 15:45 #11
<ItemTemplate>
    <tr>
        <td align="left" valign="top">
            <asp:CheckBox class="text" id="ckbGroupModules" runat="server" Value='<%# DataBinder.Eval(Container.DataItem, "ModuleID") %>' Text='<%# DataBinder.Eval(Container.DataItem, "ModuleName") %>' Selected='<%# DataBinder.Eval(Container.DataItem, "ModuleChecked") %>'></asp:CheckBox>
        </td>
        <td width="10"></td>
        <td class="text">
            <asp:TextBox class="textfield" id="txtDefaultShow" runat="server" width="20" Text='<%# DataBinder.Eval(Container.DataItem, "ModuleDefaultShow") %>'></asp:TextBox>
        </td>
        <td width="5"></td>
        <td class="text">
            <asp:TextBox class="textfield" id="txtDefaultEdit" runat="server" width="20" Text='<%# DataBinder.Eval(Container.DataItem, "ModuleDefaultEdit") %>'></asp:TextBox>
        </td>
    </tr>
</ItemTemplate>




void rptModules_ItemDataBound(Object sender, RepeaterItemEventArgs e){

    TextBox txt = (TextBox)e.Item.FindControl("txtDefaultShow");
    txt.BackColor = Color.FromName("348729");
    txt.BorderColor = Color.FromName(strSecondaryColor.ToString());

}
Avatar billede snepnet Nybegynder
23. august 2004 - 15:54 #12
Nu sætter du nogle farver som jeg ikke lige forstår, så tror du ikke bare at det er fordi de ikke findes ?
txt.BackColor = Color.FromName("348729");
De værdier du kan bruge i FromName skulle være de samme som der ligger i enum-en
System.Drawing.KnownColor
Det er sådan noget som Blue og Aqua og den slags.
Avatar billede mathiasiversen Nybegynder
23. august 2004 - 15:59 #13
Nej, den er god nok - de farver virker på mine andre controller. Det er derfor jeg bruger Color.FromName(...)
Avatar billede mathiasiversen Nybegynder
23. august 2004 - 16:02 #14
Har det noget at sige at jeg gør det fra en usercontrol?
Avatar billede snepnet Nybegynder
23. august 2004 - 16:17 #15
nej det har ikke noget at sige... men det kunne have noget at sige at du har sat en class på din tekstboks i aspx-filen.
Avatar billede mathiasiversen Nybegynder
23. august 2004 - 16:20 #16
Den indeholder ikke farver, så det er ikke den. Jeg har lige prøvet og sådan ser alle mine andre controller også ud.

Jeg har et andet spørgsmål i samme kategori. En ting er at få fat i kontrollen for at sætte en style, men hvad nu når jeg gerne vil hive data ud fra f.eks. den checkbox som jeg har i min repeater? Hvordan gør man det?
Avatar billede snepnet Nybegynder
23. august 2004 - 16:27 #17
på samme måde... men det vil du typisk gøre i ItemCommand (altså... hvis brugeren gør et eller andet, kan du stille noget op med det).
hvis du tilføjer en knap i dit item kan du give den et CommandName, og et CommandArgument, so du så kan bruge i din ItemCommand.

Det du har skrevet skulle virke fint nok... er du sikker på at koden bliver kørt ?
(du kan eventuelt lige teste det ved at skrive noget ud el.l.)

Nedenstående eksempel skulle køre ok :
// og så er det godt lige et lave et check på ItemType inden du går til vaflerne.

if(e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
{
    TextBox tb = (TextBox)e.Item.FindControl("TextBox1");
    tb.BackColor = System.Drawing.Color.FromName("#c0c0c0");
}
Avatar billede mathiasiversen Nybegynder
23. august 2004 - 16:45 #18
Jeg vidste ikke at jeg skulle tilføje OnItemDataBound i repeater controllen, men det har jeg gjort nu og så virker det.

Ang. at hive data udfra listen igen, så har jeg lavet sådan en hvor man kunne rette i en liste og så skulle man trykke gem, men jeg vil gerne have at det skal ske når man trykker på Submit. Ved du hvordan det kan lade sig gøre?
Avatar billede snepnet Nybegynder
23. august 2004 - 16:49 #19
så bliver du nødt til at fræse din repeater igennem, og suge de oplysninger ud du skal bruge til en opdatering.

er det er et dataset du binder til ?
Avatar billede snepnet Nybegynder
23. august 2004 - 16:50 #20
jeg troede egentlig at webmatrix tilføjede den kode der skulle til for at abbonere på evented hvis du oprettede det via designeren, men det gør den måske ikke ?
(jeg bruger selv visual studio)
Avatar billede mathiasiversen Nybegynder
23. august 2004 - 17:08 #21
Ja, det er et dataset jeg binder til. Men hvordan kan jeg så få værdier ud fra mine textbokse, når jeg kører repeateren igennem?

Jeg bruger ikke designeren, fordi den gør nogle ubehagelige ting ved min kode.

Jeg bruger også normalt visual studio - mangler bare lige at få det installeret igen.
Avatar billede snepnet Nybegynder
23. august 2004 - 17:16 #22
Du kan gøre sådan her :

private void btnSubmit_Click(object sender, System.EventArgs e)
{
    foreach(RepeaterItem ri in this.Repeater1.Items)
    {
        TextBox tb = (TextBox)ri.FindControl("TextBox1");
        string tekst = tb.Text;
    }
}
Avatar billede mathiasiversen Nybegynder
24. august 2004 - 21:41 #23
Super, så virker det. Tak for hjælpen endnu engang.
Avatar billede snepnet Nybegynder
24. august 2004 - 21:55 #24
Det var så lidt - du får et svar her :o)
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