Avatar billede renard Nybegynder
06. marts 2007 - 23:58 Der er 18 kommentarer og
1 løsning

Sætte alle tomme tekstbokse på en side til 0

Hej, jeg har en asp.net side med et ukendt antal tekstbokse. Hvis jeg forsøger at gemme .Text fra en tom tekstboks i en database, kommer der fejl. Jeg vil derfor løber alle tomme tekstbokse igennem og hvis de er tomme, så sætte .Text = "0";

Måske noget i denne retning:
foreach (Control ctl in Controls)
        {
            TextBox tb = ctl as TextBox;
            if (tb == null) //Eller tb.Text == ""?
            {
                tb.Text = "0"; //Giver "Object reference not set to an instance of an object."
            }
        }
Avatar billede kalp Novice
07. marts 2007 - 00:00 #1
foreach (Control ctl in Controls)
        {
            TextBox tb = ctl as TextBox;
            if (tb != null && tb.Text.Trim() == "") //Eller tb.Text == ""?
            {
                tb.Text = "0"; //Giver "Object reference not set to an instance of an object."
            }
        }
Avatar billede kalp Novice
07. marts 2007 - 00:01 #2
men.. hvis du har dine TextBox i andre controls så skal du også løbe dem igennem.

Dvs. hvis f.eks der lægger en TextBox i en placeholder så vil den aldrig blive tjekket på den måde der.
Avatar billede renard Nybegynder
07. marts 2007 - 00:13 #3
OK. Ville det så fx være Control ctl in Repeater1.Controls?
Avatar billede kalp Novice
07. marts 2007 - 00:17 #4
Nej noget lignende dette.

private void checkRecursive(Control control)
{
    foreach (Control subControl in control.Controls){
    checkRecursive(subControl);
    if (subControl is TextBox && ((TextBox)subControl).Text.Trim() == "")
    ((TextBox)subControl).Text = "0";
    }
}

så kalder du bare metoden en gange med checkRecursive(this.Page.Controls)

eller this.Controls.. ja jeg sidder ikke og kan teste så du må lige prøve dig frem:)

koden er utestet!
Avatar billede renard Nybegynder
07. marts 2007 - 00:32 #5
Jeg har p.t. ikke de tekstbokses i placeholders, men det bliver nok aktuelt, så tak :)

Mht.:
foreach (Control ctl in Controls)
        {
            TextBox tb = ctl as TextBox;
            if (tb != null && tb.Text.Trim() == "")
            {
                tb.Text = "0";
            }
        }

tb er null...så den får ikke fat i nogen tekstbokse? De ligger i en tabel.
Avatar billede kalp Novice
07. marts 2007 - 00:35 #6
hvis du kan få fat i din tabel fra codebehind ved at skrive dens id, så er det fordi du skal bruge min funktion.
min kode før burde være copy & paste:)
Avatar billede renard Nybegynder
07. marts 2007 - 00:44 #7
Jag kan ikke få fat i tabellen med ID fra code behind...
Avatar billede kalp Novice
07. marts 2007 - 00:50 #8
jeg kan stadig kun forestille mig det skal gøres rekursivt...

tror det ser sådan her ud..

Du looper.

Page-> Tabel
Tabel -> Rows
Rows -> Data
Data -> TextBox

når du looper Page.Controls får du kun din tabel.. derfor skal du også loope dens Controls, men så får du kun Rows.. så der skal du også loope dens Controls og så får du Data og til sidst looper du den og så er vi på vores TextBox'e.

Sådan er mit billede af det.

hvorfor bruger du ikke bare den rekursive funktion jeg lavede tidligere?
du skal bare kopire den ind.. og kalde den med det jeg også skrev i eksemplet.
det burde det være.
Avatar billede renard Nybegynder
07. marts 2007 - 01:06 #9
Hej, med checkRecursive(this.Page.Controls); får jeg:
"The best overloaded method match for 'Cost.checkRecursive(System.Web.UI.Control)' has some invalid arguments"
"Argument '1': cannot convert from 'System.Web.UI.ControlCollection' to 'System.Web.UI.Control'"
Avatar billede renard Nybegynder
07. marts 2007 - 01:07 #10
samme med this.Controls. Hvad skal jeg ellers prøve med?
Avatar billede kalp Novice
07. marts 2007 - 01:08 #11
private void checkRecursive(Controls control)
{
    foreach (Control subControl in control.Controls){
    checkRecursive(subControl);
    if (subControl is TextBox && ((TextBox)subControl).Text.Trim() == "")
    ((TextBox)subControl).Text = "0";
    }
}

og kald den på samme måde som før..
virker det ikke så kigger jeg lige på det i morgen tidligt:)
Avatar billede kalp Novice
07. marts 2007 - 01:11 #12
private void checkRecursive(Controls control)
{
    foreach (Control subControl in control.Controls){
    checkRecursive(subControl.Controls);
    if (subControl is TextBox && ((TextBox)subControl).Text.Trim() == "")
    ((TextBox)subControl).Text = "0";
    }
}

argh.. sidste rettelse..
og ellers  i morgen:O)
Avatar billede renard Nybegynder
07. marts 2007 - 01:15 #13
Jep, er også ved at få grus i øjnene.

"The type or namespace name 'Controls' could not be found (are you missing a using directive or an assembly reference?)"
Hvad skal jeg tilføje?
Avatar billede renard Nybegynder
07. marts 2007 - 01:15 #14
OK, prøver lige
Avatar billede renard Nybegynder
07. marts 2007 - 01:16 #15
Samme, med Namespace...
Avatar billede renard Nybegynder
07. marts 2007 - 01:21 #16
Har:
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.OleDb;
Avatar billede kalp Novice
07. marts 2007 - 11:47 #17
så dette er testet og fungere.. min codebehind fil ser således ud.


using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        checkBlanks(this.Page.Controls);
    }

    private void checkBlanks(ControlCollection control)
    {
        foreach (Control contr in control)
        {
            checkBlanks(contr.Controls);
            if (contr is TextBox && ((TextBox)contr).Text.Trim() == "")
            {
                ((TextBox)contr).Text = "0";
            }
        }
    }
}
Avatar billede renard Nybegynder
07. marts 2007 - 13:07 #18
Sweet! Tak skal du ha Qawi, super god hjælp.
Avatar billede kalp Novice
07. marts 2007 - 13:11 #19
ingen årsag:)
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