Laden...

Listview mit Checkbox

Erstellt von Sclot vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.422 Views
S
Sclot Themenstarter:in
324 Beiträge seit 2007
vor 15 Jahren
Listview mit Checkbox

Hi,
Ich habe für eine kleine ToDo-Liste ein Listview mit Checkboxen drin.

Wenn die Checkbox vor einem Eintrag geklickt wird, setzte ich in der ItemChecked Methode das Erledigt-kennzeichen:


        private void listView_todo_ItemChecked(object sender, ItemCheckedEventArgs e)
        {
            if (nach_load == true)
            {
                string id = e.Item.Text;
                
                string erledigt;
                if (e.Item.Checked == false)
                {
                    erledigt = "0";
                }
                else
                {
                    erledigt = "1";
                }
                

                sql_base.ExecuteNonQuery("UPDATE todo SET erledigt='"+erledigt+"' WHERE id="+id+"");
                todo_liste_refresh();
            
			}
			

        }

Mit einem Doppelklick auf einen Eintrag möchte ich Detaillierte Informationen in einem 2. Formular dazu aufrufen.

Dazu speichere ich mir erst einmal die ID des Datensatzes in eien Variable:


private void listView_todo_SelectedIndexChanged(object sender, EventArgs e)
{
	aktuelle_ds_id = listView_todo.SelectedItems[0].Text;
}

Und rufe diese im Doppelklick für das neue Formular auf:


private void listView_todo_MouseDoubleClick(object sender, MouseEventArgs e)
{
	todo_bearbeiten form_bearbeiten = new todo_bearbeiten(aktuelle_ds_id);
	form_bearbeiten.Show();
}

2 Probleme:

    • ich find das irgendwie unsauber...
    • Beim Doppelklick auf einen Eintrag wird die checkbox mit geändert, was das ListView wohl schon von sich aus selbst macht.

Wie kann man das unterbinden?

365 Beiträge seit 2007
vor 15 Jahren

Hallo,
vielleicht im DoubleClick - Ereigniss deine CheckBoxState wechseln.
Wäre dann im Ausgangszustand, oder?!

Ist nicht ganz sauber, aber die Wirkung wäre da 😁

5.299 Beiträge seit 2008
vor 15 Jahren

Hi!

Du könntest mit typisierten Datasets und Databinding arbeiten.
Die DataTable aus dem Datenfenster auf ein DataGridview ziehen richtet ein Databinding zw. Grid und DataTable ein.
Für die Detailansicht kannste im Datenfenster das Symbol der DataTable auf "Details" ändern. Wenn du es dann aufs Form ziehst, schmeisster dir alle Controls incl. Beschriftung hin, fertig datengebunden.
Du brauchst also nur noch die Überflüssigen wieder rauszulöschen.
Ah, eine Load und Save - Funktion musste noch schreiben:

TableAdapter.Fill(Dataset);
und
TableAdapter.Update(Dataset);

Du brauchst nicht bei jeder UserAktion in die DB zu "grabschen".

meine selbstgebastelten Tuts dazu. Ist zwar VB, aber der Designer-Kram ist derselbe. Das mit den detaillierten Informationen ist im "EinzelblattView" umgesetzt.
Ein typisiertes Dataset erstellste im Datenfenster mit "Datequelle hinzufügen".

Insges. ist ein Listview wesentlich schlechter geeignet, um Datentabellen anzuzeigen, als das DataGridView. V.a. isses nicht datenbindefähig.

Der frühe Apfel fängt den Wurm.