du laver en += på teksten.... du kan nøjes med en = hvis du bare vil have teksten ind. det kan være hensigtsmæssigt at lave den slags med en StringBuilder :
// en stringbuilder Dim sb as new System.Text.StringBuilder() // så kan du sætte den tekst ind du vil sb.Append("hej") sb.Append("med") sb.Append("dig") // og til sidst sørge for at din label for værdien lblVis.Text = sb.ToString()
og så synes jeg det er meget html du skriver manuelt.... det kan man i vid udstrækning slippe for med asp.net
du skriver for øvrigt at det er en gem knap du har, men din sub hedder BtnVis_Click... er det den rigtige kode du har sendt?
Jeg er ikke så meget en haj til ASP.NET at jeg har styr på de ting - der er mange funktioner som jeg ikke har prøvet endnu. Hvor skal jeg så sætte denne StringBuilder ind?? Og grunden til jeg har += er fordi at jeg ikke vil have det hele til at står på en linie og så vidt jeg forstår er det sådan man strukturere sin kode.
Ja det er den rigtige kode. Det er fordi det er mit alternativ, da jeg ikke kunne få teksten overført til en ny side vha codebehind og printet ud derfra. Når man trykker på gem, bliver info gemt i en ny database, samt vist i en label i bunden denne label printer jeg så ud via Java Script.
Jeg glemte vist at sige at jeg har ca 15 seperate tabeller som skal vises i denne label før det skal printes ud, så en stringbuilder kan vist ikkeb håndtere alle disse, eller skal jeg bare kalde den sb1, sb1, etc??
stringbuilderen er den rigtige måde at lave den slags stringoperationer, og du skal ikke være nervøs for kapaciteten i den. det har ikke noget med stringbuilderen at gøre, hvis du får skrevet TxtTraadtykkelseresultat.text ud istedet for indholdet - det er givetvis fordi du gør sådan her: sb.Append("TxtTraadtykkelseresultat.text") istedet for sådan her sb.Append(TxtTraadtykkelseresultat.text)
hvad mener du med at du ikke kan få overført teksten fra den ene side til den anden? - det er der ikke noget problem i normalt.
mht til det med += så er det også kun på den første linie at du skal lave være med at gøre det: LblVis.text += "<table class=..... - her skulle du bare skrive LblVis.text = "<table class=..... i resten af linierne skal du self. bevare +=
og så synes jeg som nævnt at det er meget html du skriver manuelt - prøv at se noget som dette
<asp:PlaceHolder id="ph" runat="server" />
og i din code-behind:
'opret en tabel Dim table as new Table() Dim row as new TableRow() Dim cell as new TableCell()
'smid rækken ind i tabellen table.Rows.Add(row) 'skriv noget i cellen cell.Text = "hej" 'tilføj cellen til rækken row.Cells.Add(row)
'og du kan self. fortsætte row = new TableRow() cell = new TableCell() cell.Text = "med" row.Cells.Add(cell) table.Rows.Add(row)
row = new TableRow() cell = new TableCell() cell.Text = "dig" row.Cells.Add(cell) table.Rows.Add(row)
'til sidst kan du så lægge tabellen ind i din placeholde på siden ph.Controls.Add(table)
hvis du skriver om du bruger version 1.1 eller version 2.0 - skal jeg sende dig et eksempel på det med at overføre diverse fra den ene siden til den anden - uden at bruge querystring og sessionvariable ell.
Min opgave er data fra db samt taster manuelt i tekstfelter, dette fører jeg over i label via BtnVis og denne label skriver jeg ud via java. Så alt dette med tabel er egentlig dobbelt for det står allered op i tekstfelterne - mit problem er bare at jeg vil ikke have tekstfelterne med på udskriften og derfor skal det ligges i label først.
Det jeg ikke kan ser er: Hvorfor er dette så smart, når det reelt set er det samme jeg gør med HTML.Og den tekst som skal stå i label er ikke fast defineret.
hvis det blot er fordi dine tekstbokse ikke må ligne tekstbokse på udskriften - kan du style dig ud af det, men jeg synes egentlig det er en udmærket løsning at styre udskriftpræsentationen selvstændigt, hvilket du så også gør.
serverkontroller renderes (sendes til klienten som html) udfra et regelsæt, og regelsættet er afhængig af klienten (den browser brugeren benytter til at kigge på siden med). hvis du skriver din html ud selv - skal du selv sørge for at ændre html'en afhængig af de browser der besøger siden, hvilket der ikke er megen idé når funktionaliteten allerede er lavet.
skriver du html som du gør - får du ingen kontrol af om tingene er iorden på kompileringstidspunktet, og du får heller ikke en lækker objektmodel at arbejde med.
principielt kunne du jo lave en Response.Write("den html du ønsker på siden") for alt hvad du laver, men så ville der ikke være nogen grund til at benytte asp.net.
Jeg kan godt se hvad du siger mht. serverkontrol, men jeg har bare lidt svært ved at overskue hvordan det skal gøres når jeg ikke ved hvor mange informationer brugeren taster ind.
Antallet af tabeller er altid givet, men det er ikke sikkert at alle textfelter i tabellen er fyldt ud.
Strukturen i en tabel er:
Overskrift Text Textbox Text Textbox Text Textbox Text Textbox Text Textbox Text Textbox Text Textbox Text Textbox Text Textbox Text Textbox Text Textbox Text Textbox Text Textbox Text Textbox Text Textbox
Derfor er det også irriterende (med html på denne måde) når textboxen ikke er fyldt ud, så viser den alligevel teksten og en tom celle, som reelt set ikke behøvede at blive printet.
du kan spørge på indholdet af det indtastede når du bygger din tabel op - fx.: if not TxtSomCrossResultat.Text = String.Emty 'der står noget i tekstboksen - så du skal putte noget ind i tabellen end if
Hvis der så kun er data ved Stoftype 1+2 samt Farve 1+2, hvordan får jeg så vist disse i en label, med denne struktur (Og den samtidig osse kan bruges hvis 3+4+5 er fyldt):
Text Data Text Data Text Data Text Data Text Data Text Data Text Data Text Data Text Data Text Data Text Data Text Data Text Data Text Data Text Data
Du har en meget fin objektmodel i serverkontrollerne, som giver dig masser af muligheder for at kigge på hvordan forholdende er i dem når en bruger laver et postback.
hvis din tabel var angivet med runat="server" kan du trisse ned igennem den programmatisk sådan her:
// for hver række i tabellen foreach(TableRow tr in Skaering.Rows) { // find den tekstboks du vil undersøge: TextBox tb = tr.Cells[x].Controls[0] as TextBox; if(tb.Text != String.Emtpy) { // gør hvad der skal gøre når der står noget i tekstboksen } }
du har gode muligheder for at gøre det meget generisk - f.eks. ville det ikke være noget problem at kigge alle celler igennem, og gøre noget hvis nogle af dem indeholder tekstbokse med indhold:
foreach(TableCell tc in tr.Cells) { // er der nogle kontroller i cellen if(tc.HasControls()) { // så prøver vi at se om det er en tekstboks TextBox tb = tc.Controls[0] as TextBox; if(tb != null) { // og hvis det er tilfældet kan vi så kigge på den string indhold = tb.Text; } } }
der er mange muligheder for at arbejde med tingene på den måde....
man kan nok ikke kalde det et svar på dit spørgsmål, men jeg synes du skal begynde at arbejde lidt med kontrollerne på den måde.... der dukker mange forrygende ting op når man kommer lidt ind under huden på det - hvilket nok vil gøre det ganske nemt for dig at realisere et scenarie som det du beskriver.
alt dette skal jeg skrive i min codebehind ikke???
Jeg har prøvet codebehind før, men jeg kunne ikke få det til at virke. Da overførte jeg data fra tekstfelterne til en ny side med labels for derefter at printe det ud, men jeg kunne aldrig få data med og tyede derfor til java mht print.
det har ikke noget betydning for funktionaliteten i dit program om du skriver i code-behind filer, eller direkte i aspx-filen. det undrer mig dog at du har haft problemer med at få det til at virke.... hvilket udviklingsmiljø (hvis noget) bruger du? - og hvilken version af frameworket?
mht. til det med at overføre variable - så check lige denne her igen: 03/11-2005 10:34:09
Jeg er nu ved at prøve // for hver række i tabellen
foreach(TableRow tr in Skaering.Rows) { // find den tekstboks du vil undersøge: TextBox tb = tr.Cells[x].Controls[0] as TextBox; if(tb.Text != String.Emtpy) { // gør hvad der skal gøre når der står noget i tekstboksen } }
men det er da c# eller ++ er det ikke?? (Jeg bruger VB)
jo - det er C#... prøv noget i denne stil istedet:
Dim tr As TableRow For Each tr In Skaering.Rows ' find den tekstboks du vil undersøge: Dim tb As TextBox = tr.Cells(x).Controls(0) as TextBox If tb.Text <> String.Emtpy Then ' gør hvad der skal gøre når der står noget i tekstboksen End If Next
Dim tb As TextBox '= tr.Cells(0).Controls(0) as TextBox
For Each tr In Skaering.Rows ' find den tekstboks du vil undersøge: If tb.Text <> "-" Then ' gør hvad der skal gøre når der står noget i tekstboksen
Så får jeg denne fejl Detaljer om undtagelse: System.InvalidCastException: Den angivne ændring er ugyldig.
Kildefejl:
Linje 598: Dim tb As TextBox '= tr.Cells(0).Controls(0) as TextBox Linje 599: Linje 600: For Each tr In Skaering.Rows Linje 601: ' find den tekstboks du vil undersøge: Linje 602: If tb.Text <> "-" Then
Det er lidt svært med denne kode når man ikke har prøvet det før. Jeg har søgt mange steder på nettet, men de beskriver det knudret.
Så er jeg tilbage :-) Du har dog hjulpet mig med at par andre ting i mellemtiden - tak for det.
Jeg opgav mht. til at fylde min label på den måde du nævnte, men jeg kan bruge den funktion et andet sted nu.
Min Db:
OrderID Product ID OneDesign OD_Char OD_Model OD_Type Boat Sailtype areal 1001 yes Light FBMA01 Spinnaker - - - 1001 b no - - - Luffe37 Main 23 1001 c yes Heavy DYSPLITO Main - - - 1002 a no - - - HalbergRassy Jib 15 1002 b no - - - Bianca gen 1002 c yes Medium DRMA05 Jib - - - 1002 d no - - - Oceanis furl 21 1003 a yes All-round BBSA01 Jib - - - 1003 b yes Light C-LW-GN-PR-01 Main - - - 1003 c yes Heavy C-LW-GN-TA-01 Spinnaker - - - 1003 d no - - - Sigma 38 head 18 1003 e no - - - Katemaran main 19 1004 f yes Light A101MA01 Spinnaker - - -
Der skal laves udtræk fra DB. Select * from Db where OrdreID= 1002
Derefter skal data vises, men ud fra OneDesign.
På de poster hvor der er yes i onedesign skal data fra felterne _Characteristics, OD_Model og OD_Type vises, og på de poster hvor onedesign er no skal data fra felterne Boat, Sailtype og areal vises
Output bliver således:
Products in Order 1002
Onedesign: OD_Char OD_Model OD_Type Medium DRMA05 Jib
Ok det virker forvirrende, da stukturen smuttede jeg prøver igen. DB: OrderID Product ID OneDesign OD_Char OD_Model OD_Type Boat Sailtype areal 1001 yes Light FBMA01 Spinnaker - - - 1001 b no - - - Luffe37 Main 23 1001 c yes Heavy DYSPLITO Main - - - 1002 a no - - - HalberRassy Jib 15 1002 b no - - - Bianca gen 1002 c yes Medium DRMA05 Jib - - - 1002 d no - - - Oceanis furl 21 1003 a yes All-round BBSA01 Jib - - - 1003 b yes Light C-LW-GN-PR-01 Main - - - 1003 c yes Heavy C-LW-GN-TA-01 Spinnaker - - - 1003 d no - - - Sigma 38 head 18 1003 e no - - - Katemaran main 19 1004 f yes Light A101MA01 Spinnaker - - -
Hvis nogen kunne bruge en dynamisk loaded label kommer den her:
Function CreateLabel() Dim MyLabel As Label = New Label
MyLabel = New Label MyLabel.Text = "There is a problem finding your User ID in the database<br><br>" MyLabel.CssClass = "AccesDenied" LblMessage.Controls.Add(MyLabel)
Haha ... Ja er du vimmer det er da en ældre sag :o) Mvh
Synes godt om
Ny brugerNybegynder
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.