Avatar billede strafenmacher Nybegynder
12. november 2004 - 18:24 Der er 4 kommentarer og
1 løsning

Edit/update i et DataGrid

Jeg har lavet et datagrid, og vil kunne editere i det v.h.a. EditCommand- og UpdateCommand events.
Når jeg kører programmet trykker jeg først på "edit" og kan så redigere den ønskede række i DataGrid. Når jeg så trykker på "update" får jeg en fejlmeddelelse ("Update requires a valid UpdateCommand when passed DataRow collection with modified rows").
Håber nogen kan finde fejlen i min kode.
Her er koden.

public class DataGrid2 : System.Web.UI.Page
{
  protected Label Label1;
  protected SqlDataAdapter sqlDataAdapter1;
  protected SqlCommand sqlSelectCommand1;
  protected SqlCommand sqlInsertCommand1;
  protected SqlConnection sqlConnection1;
  protected Accessing_and_Binding_Data.DataSet2 dataSet21;
  protected DataGrid DataGrid1;
   
  private void Page_Load(object sender, EventArgs e)
  {
    sqlDataAdapter1.Fill(dataSet21);
    DataGrid1.DataKeyField = "ID";
    DataGrid1.DataBind();
  }

  private void DataGrid1_EditCommand(object source,
                                DataGridCommandEventArgs e)
  {
    DataGrid1.DataSource = dataSet21.Persondata.DefaultView;
    DataGrid1.DataKeyField = "ID";
    DataGrid1.EditItemIndex = e.Item.ItemIndex;
    DataGrid1.DataBind();
  }

  private void DataGrid1_CancelCommand(object source,
                                DataGridCommandEventArgs e)
  {
    DataGrid1.DataSource = dataSet21.Persondata.DefaultView;
    DataGrid1.DataKeyField = "ID";
    DataGrid1.EditItemIndex = -1;
    DataGrid1.DataBind();
  }

  private void DataGrid1_UpdateCommand(object source,
                                DataGridCommandEventArgs e)
  {
    TextBox TB_Fornavn, TB_Efternavn, TB_Alder;
    TB_Fornavn = (TextBox)e.Item.Cells[1].Controls[0];
    TB_Efternavn = (TextBox)e.Item.Cells[2].Controls[0];
    TB_Alder = (TextBox)e.Item.Cells[3].Controls[0];

    DataSet2.PersondataDataTable personTable =
                                      dataSet21.Persondata;
    DataSet2.PersondataRow rowToUpdate =
                  (DataSet2.PersondataRow)personTable.Rows
                                        [e.Item.ItemIndex];
    rowToUpdate.Fornavn = TB_Fornavn.Text;
    rowToUpdate.Efternavn = TB_Efternavn.Text;
    rowToUpdate.Alder = Convert.ToInt16(TB_Alder.Text);
// Næste linje skulle fremkalde fejlmeddelelsen !
    sqlDataAdapter1.Update(dataSet21);
    DataGrid1.DataSource = dataSet21.Persondata.DefaultView;
    DataGrid1.EditItemIndex = -1;
    DataGrid1.DataBind();
  }
}
Avatar billede snepnet Nybegynder
13. november 2004 - 11:12 #1
det virker på din kode som om du har brugt vs til at genere dataset mv..... fik du sørget for at den også genererede delete, update og insertcommands ?
mvh
Avatar billede strafenmacher Nybegynder
13. november 2004 - 17:16 #2
Ja, det har jeg gjort, men jeg fandt ud af, at primærnøglen i tabellen Persondata ikke var sat til "ID" !
Da jeg havde sat primærnøglen korrekt, fik jeg ikke længere fejlmeddelelsen, men der opstod imidlertidigt et nyt problem. Når jeg trykker på "Update" efter jeg har ændret i tekstboksene, -så opdaterer den bare de oprindelige data. Med andre ord, -den opdaterer ikke ændringerne !
Jeg kan ikke se, at der skulle være nogle mangler i koden, men et eller andet må jo mangle.
Håber du kan hjælpe !
Avatar billede snepnet Nybegynder
14. november 2004 - 18:41 #3
Det er nok bare fordi du loader dine data hver gang :

Du kan pakke det du har i din page_load ind med :
if(!IsPostBack)
{
    sqlDataAdapter1.Fill(dataSet21);
    DataGrid1.DataKeyField = "ID";
    DataGrid1.DataBind();
}

mvh
Avatar billede strafenmacher Nybegynder
14. november 2004 - 19:28 #4
Ja, -det fandt jeg også ud af. Det kræver så bare, at man lægger sqlDataAdapter1.Fill(dataSet21) ind i de andre events/funktioner (Cancel_Command, Update_Command etc.).
Du skal have tak for hjælpen snepnet.
Hvis du sender et svar, kan jeg give dig dine point.
Avatar billede snepnet Nybegynder
14. november 2004 - 19:44 #5
et svar her :o)
mvh
(det kan nogle gange være lidt enklere, hvis du lægger datasættet i session, og så bare bearbejder det der)
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester