Avatar billede kongen72 Nybegynder
27. juni 2009 - 16:01 Der er 20 kommentarer og
1 løsning

checkboxlist problemer!

Hej.

Jeg har problemer med at få min checkboxlist til at fungere. Nogle der kan hjælpe mig trinvis, helt fra starten af??


Tak på forhånd,
Avatar billede aaberg Nybegynder
29. juni 2009 - 08:39 #1
Jeg kan godt hjælpe dig, men jeg skal bruge noget mere information.

1. Jeg går ud fra at det er en webside du er i gang med at udvikle. Er dette rigtigt antaget?
2. Hvor kommer data fra, som skal ind i CheckBoxListen? Database, xmldokument, objektliste eller er de hardcoded?
Avatar billede kongen72 Nybegynder
29. juni 2009 - 16:06 #2
Hej aaberg_cc!

Det er rigitg antaget, det er en webside jeg er ved at udvikle.

Først vil jeg lige nævne, at min checkboxliste ligger i et formview.

Mine data kommer fra en SqlDataSource, hvor jeg har lavet en tabel (Sport), som indeholder 3 kolonner (ID - int)(Sports - varchar)(IsSelected - bit).

Under kolonnen (Sports - varchar) har jeg tilføjet en masse sportsgrene, som jeg har forbundet med checkboxlisten. Så man kan checke sine sportsgrene af.


-og ja, så ved jeg ikke rigtig, hvordan jeg skal forsætte!! :-(
Avatar billede aaberg Nybegynder
30. juni 2009 - 13:56 #3
Her kommer i første omgang et eksempel på, hvordan du viser dine CheckBoxe. Så skal jeg se om jeg kan udvide det i aften, til også at opdatere datatabellen i Sql Serveren.

På din side, i desing modus, starter du med at tilføje din SqlDataSource. Dette går jeg ud fra at du selv kan finde ud af, ellers må du sige fra, så forklare jeg det i detaljer.

Når det er gjort, tilføjer du en Repeater Control. I Repeateren sætter du Data Source'en til at være din SqlDataSource.

Når du har gjort dette skifter du til Source modus (nede i højre hjørne). Inde i repeateren, tilføjer du følgende:

<ItemTemplate>
    <div><asp:CheckBox runat="server" ID="theCheckBox" Text='<%#Eval("Sports") %>' Checked='<%#Eval("IsSelected") %>' /></div>
</ItemTemplate>

Nå får du en liste over dine CheckBox'er frem på din form.

Jeg bruger ikke checkboxlist, da denne ikke understøtter at databinde Checked propertien på CheckBoksene.
Avatar billede kongen72 Nybegynder
30. juni 2009 - 16:05 #4
Hej aaberg_cc!

Jeg kan forstå, hvad du skriver. -og har gjort præcis, som du har forklaret.

Men får fejl, når jeg debugger siden: Dette bliver markeret med gult: <asp:CheckBox runat="server" ID="theCheckBox" Text='<%#Eval

-også får jeg fejlmeddelelsen: InvalidCastException was unhandled by user code, Den angivne ændring er ugyldig.
Avatar billede aaberg Nybegynder
01. juli 2009 - 08:42 #5
Hej igen,

Du kan downloade det eksempel jeg har lavet via dette link:
http://files.getdropbox.com/u/671260/CheckBoxDatabindTest.aspx

For at siden du downloader skal virke, skal du ændre på connectionstrengen på SqlDataSource'en.

Prøv at se om du ikke kan få dette til at virke.

Hvis du ikke får det til at virke, vil jeg gerne se hele din kode.
Avatar billede aaberg Nybegynder
01. juli 2009 - 10:07 #6
Nu har jeg lavet et eksempel med en Save knap, som opdaterer databasen med de ændringer der er gjort.

Download det fra dette link.
http://files.getdropbox.com/u/671260/CheckBoxDatabindTest2.aspx

Er der noget du ikke forstår, skal du endelig bare spørge :-)

Bemærk at jeg har både markup og kode i aspx filen. Normalt vælger jeg at have en code-behind fil til koden.
Avatar billede kongen72 Nybegynder
01. juli 2009 - 23:36 #7
Ved begge dine tests, får jeg følgende fejl ved debugging:

Initialiseringsstrengens format svarer ikke til den specifikation, der starter ved indekset 0.

Detaljer om undtagelse: System.ArgumentException: Initialiseringsstrengens format svarer ikke til den specifikation, der starter ved indekset 0.
Avatar billede aaberg Nybegynder
02. juli 2009 - 08:27 #8
Initialiseringsstrengen!? Gad vide om det ikke betyder connectionstring? Jeg hader danske fejlmeddelelser.

Tjek din connectionstring. Hvis du refererer til en connectionstring i web.config filen, så tjek at at denne reference er rigtig. I mit eksempel er ProviderName sat til "System.Data.SqlClient", hvis du ikke bruger Microsoft SQL Server, skal ProviderName ændres.

Hvis du stadig ikke får det til at virke, så prøv at copy/paste hele koden med dine modificeringer ind her. Så skal jeg se om jeg kan se nogle fejl.
Avatar billede kongen72 Nybegynder
02. juli 2009 - 17:05 #9
Hej aaberg!

Fandt ud af, at når jeg fjerner Checked='<%#Eval("IsSelected") %>' fra "source modus", så får jeg min liste med CheckBox'er frem! Så noget af det virker! :-)

Så ved ikke om det er min [IsSelected] kolonne, som er opbygget forkert eller hvad!? Fordi [sports] går fint igennem!

IsSelected - kolonne egenskaber:
Name: IsSelected
Allow Nulls: Yes
Data Type: bit
Full-text Specification: No
Identity Specification: No
Is Sparse: No
Avatar billede aaberg Nybegynder
02. juli 2009 - 22:27 #10
Der ligger vel ikke nogle NULL værdier i IsSelected kolonnen? Det tror jeg ville fejle. Du kan eventuelt sætte Allow Nulls til true.
Avatar billede kongen72 Nybegynder
03. juli 2009 - 05:13 #11
Sådan aaberg!

Nu virker det sq perfekt! :-) Der var angivet NULL værdier i IsSelected kolonnerne. Så rettede dem til False.

Har dog lige en anden ting - Hvordan gemmer jeg de valgte checkbox-informationer??
Lige nu, opdatere jeg vel bare databasen-informationerne.

Kører nederstående standard script-tutorial, til createuserwizard. Kunne du måske tilføje noget c# til scriptet, så det gemmer de valgte checkbox-informationer og så det hænger sammen med resten af scriptet? Så vil det bare være fantastisk!


public partial class CreateNewWizard : System.Web.UI.Page {

    // CreatedUser event is called when a new user is successfully created
    public void CreateUserWizard1_CreatedUser(object sender, EventArgs e) {

        // Create an empty Profile for the newly created user
        ProfileCommon p = (ProfileCommon) ProfileCommon.Create(CreateUserWizard1.UserName, true);

        // Populate some Profile properties off of the create user wizard
        p.Country = ((DropDownList)CreateUserWizard1.CreateUserStep.
            ContentTemplateContainer.FindControl("Country")).SelectedValue;
        p.Gender = ((DropDownList)CreateUserWizard1.CreateUserStep.
            ContentTemplateContainer.FindControl("Gender")).SelectedValue;
        p.Age = Int32.Parse(((TextBox)CreateUserWizard1.CreateUserStep.
            ContentTemplateContainer.FindControl("Age")).Text);

        // Save the profile - must be done since we explicitly created this profile instance
        p.Save();
    }
}
Avatar billede aaberg Nybegynder
03. juli 2009 - 13:05 #12
Du må tilføje en UserId eller UserName kolonne til Sport tabellen. Derudover må du gøre så den allerede eksisterende kolonne er en identity kolonne. På denne måde vil id'en autoinkrementere, og du vil kunne se hvilken bruker rækkerne hører til.

Så skal du tilføje en Insert query til din SqlDataSource. Eksempeltvis
INSERT INTO Sport (Id, UserId, Sports, IsSelected) VALUES(@userId, @sports, @isSelected)

Opret tilhørende @userId, @sports og @isSelected parametre.

Nu kan du udvide din kode med:

foreach (RepeaterItem item in checkBoxRepeater.Items)
{
  theDataSource.InsertParameters["userId"].DefaultValue = yourNewUserId;
  theDataSource.InsertParameters["sports"].DefaultValue = ((CheckBox)item.FindControl("theCheckBox")).Text;
  theDataSource.InsertParameters["IsSelected"].DefaultValue = ((CheckBox)item.FindControl("theCheckBox")).Checked;

  theDataSource.Insert();
}


Problemet med dette er, at før brugeren er oprettet, vil han ikke logge i databasen, og hvilke Checkboxe skal da hentes op? Dette kan løses ved at have en Anonymous bruger med tilhørende checkboxe, som hentes op fra databasen, hvis brugeren ikke er oprettet.

jeg håber dette gav mening!?
Avatar billede kongen72 Nybegynder
04. juli 2009 - 05:30 #13
Er det muligt, at få det hele vist i en samlet test?? Fordi der mangler ligesom noget. -Ellers har jeg tilføjet rettelserne forkert!

- Jeg beklager, at du skal skære det hele ud i pap for mig! ;-)
Avatar billede aaberg Nybegynder
05. juli 2009 - 21:23 #14
Jeg kunne nok godt have lavet et bedre eksempel til dig, men jeg er taget på ferie siden min sidste kommentar. Nu sidder jeg ved en lånt computer der ikke har visual studio installeret, så det er lidt svært at skrive eksemplet.

Jeg kommer tilbage fra ferie om 2 uger. Hvis det er for lang tid at vente, kan du eventuelt oprette et nyt spørgsmål :-)
Avatar billede kongen72 Nybegynder
06. juli 2009 - 05:09 #15
Det er iorden, jeg venter bare til du er tilbage igen! go' ferie herfra!
Avatar billede kongen72 Nybegynder
26. august 2009 - 09:47 #16
klar til at hjælpe mig videre?:-)
Avatar billede aaberg Nybegynder
26. august 2009 - 11:35 #17
Beklager, jeg havde glemt alt om dette!

Jeg skal se om jeg får tid i aften eller i morgen, til at lave et eksempel :-)
Avatar billede kongen72 Nybegynder
31. august 2009 - 21:45 #18
Fik du lavet et eksempel til mig? ;-)
Avatar billede aaberg Nybegynder
01. september 2009 - 08:53 #19
Jeg har haft sindsygt travlt på arbejde den sidste uge, vi skal levere et system som allerede er meget forsinket.

Jeg fik ikke tid i weekenden alligevel, og det ser desværre ikke ud som om jeg får tid de næste par uger heller.

Jeg beklager, men du får nok mere ud af at oprette et nyt spørgsmål.
Avatar billede kongen72 Nybegynder
01. september 2009 - 19:17 #20
Det prøver jeg. takker for din hjælp!
Avatar billede kongen72 Nybegynder
31. december 2009 - 03:27 #21
lukker!
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