02. august 2004 - 16:21Der er
8 kommentarer og 1 løsning
Behandling af tjekboxe
Hej alle
Jeg har en liste checkboxe, som jeg skal vide hvilke er blevet valgt. Deres ID er bleven sat ud fra et unikt ID i en database.
Når så man trykke på Send knappen til sidst, skal jeg så indsætte alle disse ID'er i en anden tabel.
Hvordan gør jeg det nemmest?
Når man trykke på knappen kommer det her frem: 49: on; - 1: on; - 13: on; - 47: on; - 48: on; - _ctl21: Opret; -
Samtidig er VIEWSTATE der også. Teksten overfor er genereret ud fra: foreach (string s in Request.Form) { error.Text += s + ": " + Request[s] + "; - "; }
Jeg er lidt usikker på hvad du spørger om her... Er det omkring den tabel du skal indsætte i du er i tvivl, eller har du tabellen, og er i tvivl om hvordan du får sat værdierne ind. Eller har det at gøre med at du er i tvivl om måden at hive værdierne af checkboxene ud.
Du må gerne vise lidt mere kode, og måske smide et par kommentarer også.
Er dine checkbokse for øvrigt serverkontroller eller html-kontroller, og hvordan sætter du dem ind på siden ?
Ja, kan godt se nu at det er lidt mangelfult... :(
Men først og fremmest, så tror jeg at jeg har fået det til at virke. Det er altsammen code behind, og jeg har så fået sat ckb foran alle ID'erne på checkboxene.
Som beskrevet tidligere, løb jeg alle i form'en igennem, hvilket jeg så gør sådan her nu: foreach (string s in Request.Form) { if (s.StartsWith("ckb")) { //smid ind i databasen } }
Derved kan jeg være sikker på at det er en checkbox jeg har med at gøre.
Håber det er i orden jeg diskuterer med mig selv herinde :)
Det er helt iorden, men det er ikke superhensigtsmæssigt det du har gjort.
Hvis det er serverkontroller du benytter, kan du sikre dig at det er den rigtige type ved f.eks.
// hvis du han indsat alle checkboksene f.eks. i et Panel panel foreach(Control c in panel.Controls) { bool checked = false; string id = null; if(c is CheckBox) { checked = ((CheckBex)c).Checked; id = ((CheckBex)c).ID; } }
Det bevæger dig også lidt ud på farlig grund, hvis du selv overtager id-generering. Hvis du gerne vil lade id-et følger kontrollen, ville det nok være federe hvis du stak den en attribut istedet :
CheckBox b = new CheckBox(); b.Attributes["DbId"] = <dit id>;
Så kan du hente sådan her :
foreach(Control c in panel.Controls) { int dbId = 0; if(c is CheckBox) { dbId = int.Parse(((CheckBex)c).Attributes["DbID"]); } }
Det ser jo rigtig godt ud. Jeg har nu siddet og rodet med det, men jeg kommer ikke ind i min lykke foreach. Alle checkbox'ene er i en tabel i panelet. Kan det have noget med det at gøre?
Ellers har jeg fået sat noget mere på: CheckBox cb = new CheckBox(); cb.Attributes["subCategoryID"] = oleDbReader2["id"].ToString(); cb.Attributes["categoryID"] = oleDbReader1["id"].ToString(); cb.Attributes["name"] = oleDbReader2["name"].ToString();
foreach(Control c in newScheme.Controls) { int categoryID = 0; int subCategoryID = 0; string name; if(c is CheckBox) { categoryID = int.Parse(((CheckBox)c).Attributes["categoryID"]); subCategoryID = int.Parse(((CheckBox)c).Attributes["subCategoryID"]); name = ((CheckBox)c).Attributes["name"].ToString(); //Smid ind i databasen } }
Men jeg kan ikke få den til at smide noget ind i databasen. For hvis jeg smider en error.Text += "Test - "; ind i if-sætningen, kommer der ingenting på skærmen. Ergo, kommer den ikke ind if-sætningen...
Jeg lavede en rekursiv funktion: kigEfterCheckboxe(Control c);
foreach(Control c in newScheme.Controls) { if (c.Controls.Count > 0) kigEfterCheckBoxe(c); }
foreach (Control c in o.Controls) { if (c.Controls.Count > 0) kigEfterCheckBoxe(c); int categoryID = 0; int subCategoryID = 0; string name; if (c is CheckBox) { oleDbConnection1.Open(); categoryID = int.Parse(((CheckBox)c).Attributes["categoryID"]); subCategoryID = int.Parse(((CheckBox)c).Attributes["subCategoryID"]); name = ((CheckBox)c).Attributes["name"].ToString(); //Smid ind i databasen oleDbCommand1.ExecuteNonQuery(); oleDbConnection1.Close(); } }
det var bare fordi du skrev at den ikke kom ind i if-sætningen fordi du ikke kunne se noget på skærmen. Nå... men hvis du debugger - kan du trævle en hvilken som helst kontrol op, og så kan du komme til at se hvor dine checkboxe ligger (altså hvis du har problemer med at finde dem). Eller kan du også slå trace til... Det kan give dig gode informationer på skærmen.
Hov... mit vindue havde vist ståt åbent lidt for længe der :o)
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.