foreach (DataRow dr in dt.Rows) { lvi = new ListViewItem(dr[0].ToString()); lvi.SubItems.Add(dr[1].ToString()); lvi.SubItems.Add(dr[2].ToString()); listView1.Items.Add(lvi); } }
//Slet valgte private void button2_Click(object sender, EventArgs e) { foreach (ListViewItem lvi in listView1.Items) if (lvi.Selected) _data._ds.Tables[0].Rows[lvi.Index].Delete(); _data._ds.AcceptChanges(); _data.update(); _data._ds.Clear(); } }
Denne side indeholder artikler med forskellige perspektiver på Identity & Access Management i private og offentlige organisationer. Artiklerne behandler aktuelle IAM-emner og leveres af producenter, rådgivere og implementeringspartnere.
nielle -> Jeg er ikke sikker på hvad du mener med initaliseret? men LV er bare trukket ind fra toolbox og fyldt via ovenstående click event.
sherlock -> jeg vil give dig ret, men jeg har en bog der gør det uden at definere en delete. Jeg har leget lidt men kan ikke helt gennemskue hvordan den skulle se ud.
Hvis jeg bare trækker en gridview ind og binder den til indholdet af en tabel får jeg en version hvor hver række i tabellen vises som en stor ikon i gridviewet. Jeg får ikke en række pr række så at sige.
Den er sat til detail - Der er intet problem med listview'et. Jeg henter og viser data fint. Det er i linket mellem DataSet og databasen når rettelser i datasettet skal skrives i databasen der er problemer med.
So sherlock er inde på så kalder din adapter.Update() den indbyggede DELETE kommando i adapteren. Men da du ikke har sat adapter.DeleteCommand til noget, så er der slet ikke nogen DELETE at kalde. Derfor bliver der heller ikke slettet noget.
En hurtig måde at danne alle CRUD kommandoerne på er ved at anvende SqlCommandBuilder klassen - så tag et kig på den.
PS: Du har også et problem i vieweren: prøv at markere noget og slet det, prøv så at gøre dette en gang mere.
Nej. Efter alt hvad jeg kan læse mig til på MSDN så skal dataadapteren selv kunne generer en delete kommando. Det kan jeg på ingen måde få den til, så nu gør jeg det manuelt istedet.
Hej, jeg kan godt få det til at fungere med en Builder, men ikke uden:
class db { private const string connString = "Data Source=dataexpe-dfocde;Initial Catalog=Eksperten;Integrated Security=SSPI;"; public DataSet _ds; SqlConnection conn; SqlDataAdapter adapter;
public db() { conn = new SqlConnection(connString);
adapter = new SqlDataAdapter(); adapter.SelectCommand = new SqlCommand("SELECT * FROM e800412", conn); SqlCommandBuilder builder = new SqlCommandBuilder(adapter);
conn.Open();
_ds = new DataSet("Test"); adapter.Fill(_ds, "Test");
1) Måden Delete() sletter i et DataSet er ved ar sette RowState for den slettede række til at være lig med DataRowState.Deleted. Rækken bliver faktisk ikke slettet med det samme. 2) Det som DataSet'tes Update() er at slette alle de rækker i databasen som har denne status. 3) AcceptChanges() nulstiller så at sige DataSet'tet - alle rækkerne med RowState == DataRowState.Deleted bliver f.eks. fjernet.
Ved at klade AcceptChanges() før Update() fjernede du effektivt oplysningerne om hvilke rækker der skulle slettes. Derfor blev det heller ikke slettet noget.
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.