25. april 2005 - 10:37Der er
23 kommentarer og 1 løsning
Sletning fra DataGrid
Jeg forsøger at slette en række fra et DataGrid. Er der nogen der kan se hvad der er galt med denne methode: private void DataGrid1_DeleteCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e) { int rowToDelete = e.Item.ItemIndex; string deleteCmd = "DELETE from Users WHERE UserID = @UserID";
DataGrid1.DataBind(); } Når jeg forsøger at slette fra DataGrid for jeg denne fejl, som jeg ikke lige helt fatter så meget af: Index was out of range. Must be non-negative and less than the size of the collection. Parameter name: index
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.
ja undskyld at jeg ikke lige fik givet et ordentlig svar. Både ja og nej, for Sql'en løste et problem men jeg kan stadig ikke få slettet en række i tabellen når der trykkes på 'delete' på griddet. Kan ikke lige finde ud af at hente de parametre der fortæller hvilken række der trykkes på. Men har forsøgt med: myCommand.Parameters.Add(new OdbcParameter("@Id", OdbcType.NVarChar, 11)); myCommand.Parameters["@Id"].Value = DataGrid1.DataKeys[(int)e.Item.ItemIndex];
der så skal kalde metoden (i en anden klasse) public void deleteRow(string tableName, string delcom) {
myCommand = new OdbcCommand(delcom, odbcConn); myReader = myCommand.ExecuteReader(); myReader.Close(); odbcConn.Close(); } public void deleteRow(string tableName, string delcom) {
1) I dit oprindelige tilfælde, gør du meget ud af at oprette din myCommand, men så vidt jeg kan se så eksekvere du den aldrig. Jeg forstår ikke hvorfor dette skulle give din en index-fejl.
2) I dit indlæg 26/04-2005 08:32:12 bruger du en ExecuteReader() til at udføre en delete-kommando med. Det ville virke, men det er nu mere korrekt at bruge ExecuteNonQuery() i stedet.
Hej igen. nielle -> 1) for at gøre en lang historie kort hat jeg måtte droppe min oprindelige idé. 2) jeg kan ikke bruge ExecuteNonQuery()da der ikke kan konverter en 'int' til Odbc.OdbcDataReader.
Dog har jeg fundet ud at jeg KAN slette i DB. Koden nedenfor viser at det er muligt at slette rækken i tabellen hvor X11 er.
private void DataGrid1_DeleteCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e) { dbcon = new DBConnection(); del = "DELETE from PLACE WHERE PLACEID = 'X11'"; // myCommand.Parameters.Add(new OdbcParameter("@Id", OdbcType.NVarChar, 11)); // myCommand.Parameters["@Id"].Value = DataGrid1.DataKeys[(int)e.Item.ItemIndex]; dbcon.deleteRow(tableName, del); }
Dog vil jeg gerne kunne slette på en tilfældig række man trykker på. Det kan fikses med noget lign. som den udkommenterede del. Ved bare ikke hvordan? Nogen ideer?
ExecuteReader() - bruges når man har bruge for at hente data og loope igennem en masse rækker. Bruges sammen med en SELECT som returnere et ukent antal rækker. Du er nødt til at have en xxxxReader for at "tage imod" resultatet
ExecuteNonQuery() – bruges når man blot skal have udført en SQL kommando og ikke skal have noget resultat tilbage. Bruges sammen med DELETE og UPDATE. Da den ikke retunere noget, skal man heller ikke bruge en xxxxReader.
ExecuteScalar() - bruges når man har en SQL sætbning som kun returnere en enkelt værdi - f.eks. "SELECT count(*) FROM ...". Da resultatet er en scalar skal resultatet samles op i en passende type:
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.