Filter-Listenfeld mit dem Textfeld, in Echtzeit
Ich versuche zu filtern, eine listbox mit text aus einer textbox in Echtzeit.
Hier ist der code:
private void SrchBox_TextChanged_1(object sender, EventArgs e)
{
var registrationsList = registrationListBox.Items.Cast<String>().ToList();
registrationListBox.BeginUpdate();
registrationListBox.Items.Clear();
foreach (string str in registrationsList)
{
if (str.Contains(SrchBox.Text))
{
registrationListBox.Items.Add(str);
}
}
registrationListBox.EndUpdate();
}
Hier sind die Themen:
-
Wenn ich das Programm starte bekomme ich diesen Fehler:
Object reference not set to an instance of an object
-
Wenn ich auf backspace, meine ursprüngliche Liste wird nicht angezeigt mehr. Dies ist, weil meine aktuelle Liste von items ist jetzt reduziert, aber wie kann ich das erreichen?
Können Sie zeigen mich in die richtige Richtung?
haben Sie versucht, mit (!IsPostBack) Prüfung, ob es nicht nach hinten
Müssen Sie bewahren den Inhalt des Listenfeldes in einem separaten
Ziemlich sicher, dass dies eine WinForms-Frage...
Johnson mögen Sie Recht haben
Ja ist eine Winform
Müssen Sie bewahren den Inhalt des Listenfeldes in einem separaten
List<string>
so dass Elemente.Clear () - don ' T lassen Sie Sie mit einer leeren Liste. Die NRE ist nicht so offensichtlich. Umwandlung in string nicht unbedingt funktionieren, wenn die ursprünglichen Elemente sind keine Zeichenfolgen. Verwenden Sie immer die ToString().Ziemlich sicher, dass dies eine WinForms-Frage...
Johnson mögen Sie Recht haben
Ja ist eine Winform
InformationsquelleAutor observ | 2012-04-02
Schreibe einen Kommentar Antworten abbrechen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist schwer zu abziehen nur aus dem code, aber ich nehme Filter-problem entspringt aus der verschiedenen Aspekte:
a) Sie benötigen ein
Model
der Daten aufListBox
. Sie brauchen eine colleciton von "Items", die Sie halten, irgendwo (Dictionary
,DataBase
,XML
,BinaryFile
,Collection
), eine Art Store kurz.Zeigen die Daten auf Benutzeroberfläche, die Sie immer wählen Sie die Daten aus, die Store, filter und legte es auf UI.
b) Nach dem ersten Punkt Filter-code kann wie folgt Aussehen (ein pseudocode)
Hoffe, das hilft.
InformationsquelleAutor Tigran
Etwas wie das könnte für Sie arbeiten:
Danke. Irgendwie verpasste ich, dass, selbst als ich getippt
registrationListBox
mehrmals... 🙂Hehe, ich kenne das Gefühl 🙂
InformationsquelleAutor James Johnson
Ja, das war die Antwort zu filtern. (ein bisschen modifiziert). Ich hatte die info in eine Textdatei. Das ist was für mich gearbeitet
Es scheint, dass die Fehler:
ist von woanders in meinem code kann nicht meine finger auf es.
InformationsquelleAutor observ
Falls möglich, speichern alles, was in einem Wörterbuch nach und nur füllen Sie es von dort.
InformationsquelleAutor KC Drez
Ich würde es so machen:
Nur daran erinnern, füllen Sie registrationsList das erste mal, wenn Sie füllen Sie Ihren listbox.
Hoffe, das hilft.
InformationsquelleAutor Anonimous
war es eine sehr harte Frage für mich, aber ich fand einen workaround (nicht so einfach), die funktioniert gut für mich.
auf der aspx-Seite:
Brauche ich HTML input type wegen "oninput" - Funktion, das ist nicht möglich, auf klassische asp.net controls. Die writeFilterValue () - Funktion ein postback verursacht, filtert die Werte einer bestimmten ListBox (in der code-behind).
Habe ich definiert diese beiden javascript-Funktion:
Können Sie jetzt mit postback auf code-behind zu erfassen hf1-Wert, jedes mal ein einzelnes Zeichen der Eingabe auf inputbox.
Auf code-behind:
Die Funktion FiltraLbox(hf1.Wert) änderungen datasource der Listbox und rebind:
Am Ende rufe ich die Funktion setTboxValue(), wird, mit dessen Hilfe die Eingabe von text Wert verloren postback, und legt den Fokus auf.
Genießen.
InformationsquelleAutor Giorgio C.