06. marts 2007 - 23:58Der 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." } }
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." } }
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:)
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.
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'"
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;
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"; } } } }
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.