Was ist falsch an meinem Code?
Ich will in grade eine TreeView nach einer Artikelnummer absuchen lassen. Sozusagen, man gibt in einem Search Entry etwa 100 ein und es kommen 1001, 1002, 1003, ... . Jedoch habe ich das Problem, das ein teil des Codes einfach nicht funktionieren will.
if (strlen(search_text) > 0) {
visible = g_strrstr(artikelnummer, search_text) != NULL;
}
Hier will ich erreichen, dass alle Zahlen, die nicht etwa die Zahl 9 enthalten, nicht mehr Visible sind, also Visible = FALSE. Wenn ich jedoch 2 eingebe, kommt logischerweise 1002, aber wenn ich dann die 2 entferne bleibt 1002 und 1003, obwohl auch etwa 1001, 1004, ... visible sein sollten. Ich habe auch mal == statt != probiert. Das hat perfekt funktioniert (zumindest für diese einfachen zahlen. Auch habe ich printf verwendet, wobei herauskam, das eigentlich alle boolean Werte richtig sind. Ich hoffe, jemand kann mir helfen.
2 Antworten
Um genaues zu sagen ist der kleine Code Abschnitt etwas wenig, aber ich könnte mir vorstellen das vllt. dort die verfügbaren Artikel iterierst und dann Visible setzt.
Was nun passieren kann ist, dass etwas gesucht wurde und visible entsprechend gesetzt wurde, jedoch sobald der search text neu evaluiert wird die vorherigen Visible Einstellungen bleiben. Du könntest also probieren das wenn kein search text vorhanden ist alles visible ist.
Wie gesagt alles nur Vermutung, das es etwas wenig Code ist.
static gboolean filter_func(GtkTreeModel *model, GtkTreeIter *iter, gpointer data) {
gchar *artikelnummer = NULL;
gtk_tree_model_get(model, iter, 0, &artikelnummer, -1);
if (artikelnummer == NULL) {
return TRUE;
}
GtkWidget *search_entry = GTK_WIDGET(data);
const gchar *search_text = gtk_entry_get_text(GTK_ENTRY(search_entry));
if (search_text == NULL) {
search_text = "";
}
gboolean visible = TRUE;
if (strlen(search_text) > 0) {
visible = g_strrstr(artikelnummer, search_text) != NULL;
}
g_free(artikelnummer);
return visible;
}
Das ist der ganze Code, den ich für das sortieren benutze. Dafür benutze ich die visible_func, ich habe sie nur für mich in filter_func umbenannt.
Wenn du die 2 entfernst, dann ist der Suchtext leer und deine Funktion setzt den visible-Wert auf den Initalwert und der ist bei dir "TRUE". Alsow ird alles angezeigt.