Avatar billede jespera Nybegynder
16. april 2005 - 12:47 Der er 35 kommentarer og
1 løsning

ListBox multiple og validering af denne

Hej Alle,

Jeg bruger denne på min side

http://www.codeproject.com/aspnet/MCEnhancedListBoxControl.asp

Jeg kunne godt tænke mig at validere om den er selected et element. Men når jeg har valgt et element og vælger at overførere det så validerer den (postback) hvilket resultere i at jeg får er fejlbesked frem selvom der er selected et element.????

Håber i virkelig i kan hjælpe

Her er den validator jeg bruger....

<asp:RequiredFieldValidator ControlToValidate="selectedListe" EnableClientScript="false" ErrorMessage=" * Min 1 selected " Display="Dynamic" runat="server" />
Avatar billede burningice Nybegynder
16. april 2005 - 13:31 #1
hvilken fejlbesked får du?
Avatar billede jespera Nybegynder
16. april 2005 - 13:39 #2
Jamen jeg får igen fejlbesked, men den validere bare hvergang jeg trykker på  > og det burde den ikke da jeg overfører et element til selected ?
Avatar billede burningice Nybegynder
16. april 2005 - 13:49 #3
validerer skal den jo, så det er fint nok. Spørgsmålet er om den validerer til true eller false.

jeg går ud fra du har to listboxe på dine side. Har du en validator på hver af dem, eller hvordan?
Avatar billede jespera Nybegynder
16. april 2005 - 13:53 #4
Jamen den validerer til false når jeg trykker på > og overfører et element, hvilket den ikke burde gøre da jeg nu har overført et element....

Den validerer fint til true når der er elementer på liste!

Nej jeg har kun en validator på selectedListe.
Avatar billede burningice Nybegynder
16. april 2005 - 14:02 #5
det RequiredFieldValidator  gør er jo at tjekke at der er valgt mindst et item i din liste

så hvis du poster din side, og der ikke er valgt noget, så skal den validere til false, så der er ikke nogen galt det.

Jeg går ud fra at du har en submit-knap på siden, og du gerne vil have at din validator først skal validere når at du trykker på den, og ikke når du rykker elementer frem og tilbage mellem dine lister?
Avatar billede burningice Nybegynder
16. april 2005 - 14:04 #6
i så fald vil jeg anbefale dig at bruge http://www.metabuilders.com/Tools/DualList.aspx istedet, da den ikke benytter sig af postback for at flytte elementer fra den ene liste til den anden.
Avatar billede jespera Nybegynder
16. april 2005 - 14:14 #7
Ja den skal kun validere når jeg trykker submit og ikke når jeg overførerr et element
Avatar billede jespera Nybegynder
16. april 2005 - 14:28 #8
Puha der er mange filer osv i denne pakke. (jeg er lidt ny) hvad skal jeg bruge på min side så den komme til at funge næste som den anden.....
Avatar billede burningice Nybegynder
16. april 2005 - 14:35 #9
du skal egentlig kun bruge dll-filen der ligger under /bin/release. Den lægger du så ind i /bin-mappen i roden af din applikation.

på aspx-siden skriver du så i toppen

<%@ Register TagPrefix="mbdlb" Namespace="MetaBuilders.WebControls" Assembly="MetaBuilders.WebControls.DynamicListBox" %>

og så burde du kunne skrive

<mbdlb:DynamicListBox id="MyList" runat="server" OnSelectedIndexChanged="MyList_ListChanged" SelectionMode="Multiple" >

på din side, der hvor listboxene skal være
Avatar billede burningice Nybegynder
16. april 2005 - 14:36 #10
blah, det er mig der roder rundt..

du skal skrive

<%@ Register TagPrefix="mbdlb" Namespace="MetaBuilders.WebControls" Assembly="MetaBuilders.WebControls.DynamicListBox" %>

og der hvor din liste skal være skriver du så

<mbdlb:DualList runat="server" Id="DualList1" OnItemsMoved="DualList1_ItemsMoved"  ListRows="6" >
    <LeftListStyle
        ForeColor="White"
        BackColor="Black"
    />
    <RightListStyle
        Font-Bold="True"
    />
</mbdlb:DualList>
Avatar billede burningice Nybegynder
16. april 2005 - 14:38 #11
har siddet og kigget sourcekoden igennem... det lader til at DualList kun internt implementerer to ListBox'e. Det betyder at du ikke umiddelbart kan bruge RequiredFieldValidator på den, men skal lave en CustomValidator :(.. hm, nå... det lader til at være en blindgyde
Avatar billede jespera Nybegynder
16. april 2005 - 14:47 #12
Hmm har du et eksemple på custom ? så skyder jeg lige nogle flere point afsted?

mht til dll osv.....Hvor sætter jeg venstre og højre box henne, altså noget ala..

    selected.DataSource = ds.Tables[0];
    selected.DataTextField="navn";
    selected.DataValueField="id";
    selected.DataBind();
Avatar billede burningice Nybegynder
16. april 2005 - 15:36 #13
der definerer du bare

selected.LeftDataSource = ds.Tables[0];
    selected.LeftDataTextField="navn";
    selected.LeftDataValueField="id";
    selected.DataBind();


Ang CustomValidator er det ikke så svært. Her skal du bare definere hvilken funktion der skal udføres for at foretage valideringen.

<asp:CustomValidator runat="server" id="custPrimeCheck"
        ControlToValidate="dinDualList"
        OnServerValidate="ValidateDualList"
        ErrorMessage="Du har ikke valgt nogle items" />


Den kunne evt. se sådan her ud:

protected void ValidateDualList(object sender, ServerValidateEventArgs e) {

  DualList dl = (DualList)Page.FindControl(this.ControlToValidate);
  e.IsValid = (dl.RightItems.Count > 0)

}
Avatar billede jespera Nybegynder
17. april 2005 - 15:58 #14
Hej superfessor.....

Jeg vil lige prøve dit svar af inden for de næste par dage.....takker...har lige smidt 20 mere oven i hatten :-)
Avatar billede jespera Nybegynder
18. april 2005 - 14:16 #15
Hej,

Ja det ser ud som om det virker....Men hvordan kan man ændre på f.eks knap navne og overskrifter osv......
Avatar billede burningice Nybegynder
18. april 2005 - 14:57 #16
det har han desværre hardcodet ind i koden. Der står f.eks. følgende i hans InitalizeComponents i DualList.cs-filen:

this.moveLeft.Text = "<- Remove";

men du kan evt. se det som en opgave at lave de tekster om til properties så du kan gøre dette

selected.RemoveText = "<- Fjern";

hint: du skal lave følgene property i duallist klassen

public string RemoveText {
  get { return this.moveLeft.Text; }
  set { this.moveLeft.Text = value; }
}

så burde du vel kunne lave resten :)
Avatar billede jespera Nybegynder
18. april 2005 - 15:01 #17
Nu siger den?

xxxxx.aspx does not contain a definition for 'moveLeft'
Avatar billede jespera Nybegynder
18. april 2005 - 16:19 #18
Har du en ide til hvad det kunne være? :-)
Avatar billede burningice Nybegynder
18. april 2005 - 17:44 #19
det kommer an på hvad din konkrete kode er. Husk at ovenstående skal stå i selve DualList-klassen, ikke på din aspx-side
Avatar billede jespera Nybegynder
19. april 2005 - 10:47 #20
hmmm ikke helt med tror jeg :-)

De ting jeg har på min side er nu:

public string RemoveText {
  get { return this.moveLeft.Text; }
  set { this.moveLeft.Text = value; }
}

private void Page_Load( object sender, EventArgs e )
{
    if( !IsPostBack )
    {
        DualList1.LeftDataSource = ds;
        DualList1.LeftDataTextField="name";
        DualList1.LeftDataValueField="value";
        DualList1.DataBind();
        DualList1.RemoveText = "<- Fjern";
    }   
}
og længere nede...

<mbdlb:DualList runat="server" Id="DualList1" ListRows="8" >
    <LeftListStyle ForeColor="Black" Width="170"/>
    <RightListStyle ForeColor="Black"  Width="170"/>
</mbdlb:DualList>
Avatar billede jespera Nybegynder
19. april 2005 - 10:55 #21
og selfølgelig dll filen i bin
Avatar billede burningice Nybegynder
19. april 2005 - 17:35 #22
nej nej...

public string RemoveText {
  get { return this.moveLeft.Text; }
  set { this.moveLeft.Text = value; }
}

skal IND i DualList-klassen. Du har sourcekoden. Der skal du have fat i DualList.cs-filen og redigere i den før du compiler til en dll-fil.
Avatar billede jespera Nybegynder
19. april 2005 - 20:19 #23
Hej igen,

Jeg har prøvet at compilere men jeg får flg. fejl.

Cryptographic failure while signing assembly 'D:\Visual Studio Projects\DynamicListBox\DynamicListBox\obj\Release\MetaBuilders.WebControls.DynamicListBox.dll' -- 'The key container name 'metabuilders.com' does not exist'

Hvordan kan det være? Håber virkelig du kan hjælpe.

På forhånd tak...
Avatar billede burningice Nybegynder
19. april 2005 - 21:04 #24
du skal have fat i AssemblyInfo.cs og fjerne disse linjer

[assembly: AssemblyDelaySign(false)]
[assembly: AssemblyKeyFile("")]
[assembly: AssemblyKeyName("metabuilders.com")]
Avatar billede jespera Nybegynder
19. april 2005 - 21:30 #25
Hehe, hvor pokker ved du sådan noget fra...

Nå men så mangler kun valideringen :-)

Den siger ".... does not contain a definition for 'ControlToValidate'
"

Den fejler i linjen

DualList dl = (DualList)Page.FindControl(this.ControlToValidate);
Avatar billede burningice Nybegynder
19. april 2005 - 22:22 #26
oh... det er også den forkerte kode du har fået fat i der... undskyld, min fejl :)

metoden skal nok mere se sådan her ud:

protected void ValidateDualList(object sender, ServerValidateEventArgs e) {

  BaseValidator val = (BaseValidator)sender;
  DualList dl = (DualList)Page.FindControl(val.ControlToValidate);
  e.IsValid = (dl.RightItems.Count > 0)

}
Avatar billede jespera Nybegynder
19. april 2005 - 22:34 #27
hmmmm, nu siger den :-)

Control 'DualList1' referenced by the ControlToValidate property of 'custPrimeCheck' cannot be validated.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Web.HttpException: Control 'DualList1' referenced by the ControlToValidate property of 'custPrimeCheck' cannot be validated.
Avatar billede burningice Nybegynder
19. april 2005 - 23:08 #28
prøv at sætte denne property på din DualList-klasse så den ser sådan her ud

[ValidationPropertyAttribute("RightItems")]
public class DualList (...) {

}
Avatar billede jespera Nybegynder
19. april 2005 - 23:13 #29
Yes nu funker det og ja jeg forstår intet af det. :-)Har du mulighed for en forklaring.

Desuden ville det være fedt hvis du kunne fortæller hvordan man lavede mere luft mellem f.eks leftItems og "add" / "remove" i midten således at det ikke er så sammen klemt...

jeg smider lige 50 mere i...Total super med din hjælp....
Avatar billede burningice Nybegynder
19. april 2005 - 23:27 #30
well, det første med det signing, var fordi at ham MetaBuilder-fyren udnyttet en mulighed for at signere sine .Net assemblys med en unik key. Problemet er bare, at når du vil kompile hans kode har du ikke denne key, og compileren vil brokke sig. Så det man gør er at man fjerner denne signering.

Det næste problem er at CustomValidator kræver at de kontroller man vil validere er af en bestemt type, nemlig

TextBox, ListBox, DropDownList, RadioButtonList, System.Web.UI.HtmlControls.HtmlInputText, System.Web.UI.HtmlControls.HtmlInputFile, System.Web.UI.HtmlControls.HtmlSelect og System.Web.UI.HtmlControls.HtmlTextArea

(dette kan læses på http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemwebuiwebcontrolsbasevalidatorclasscontroltovalidatetopic.asp)

Dog har man den mulighed, at hvis man vil validere en kontrol der ikke hører med i ovenstående liste, så kan man sætte ValidationPropertyAttribute på sin klasse, med den property som indeholder værdien der skal valideres som parameter.

(dette kan læses her: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemwebuivalidationpropertyattributeclasstopic.asp)

Så, hvis man bare er lidt detektiv og har kendskab til opbygningen af .Net SDK kan man løse de fleste problemer :)

ang. de designmæssige problemer, så skal du bare sætte nogle flere LiteralControl("<br />")'er ind. Hvis du hiver fat i InitializeComponent()-metoden kan du i bunden se hvordan de enkelte knapper m.m. bliver sat ind. Her sørger du bare for at lave lidt flere af dem her: currentCell.Controls.Add(new LiteralControl("<br>"));
Avatar billede jespera Nybegynder
19. april 2005 - 23:37 #31
Ok.....Vil kigge lidt på link imorgen.

Mht. afstand mellem knap og box.

Så vil currentCell.Controls.Add(new LiteralControl("<br>")); kun give aftand mellem add/remove knapperne, altså lodret. Den afstand jeg ønskede var fra Boxen til knap, altså vandret?
Avatar billede burningice Nybegynder
19. april 2005 - 23:56 #32
uhm... hvad så med

currentCell.Controls.Add(new LiteralControl("&nbsp;"));
Avatar billede jespera Nybegynder
20. april 2005 - 00:00 #33
Ja, det var jo et meget godt -) Det virkede....

Lægger du et svar....

Tusind tak for din hjælp.....
Avatar billede jespera Nybegynder
20. april 2005 - 00:01 #34
ups manglede ordet "svar" i ovenstående
Avatar billede burningice Nybegynder
20. april 2005 - 00:27 #35
:) svar
Avatar billede jespera Nybegynder
20. april 2005 - 09:25 #36
takker....
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