[ASP.NET] DataGrid Edit met DataAdapter lukt niet

Pagina: 1
Acties:

  • EmilneM
  • Registratie: December 2001
  • Laatst online: 15-09-2023
Op een webform staat een datagrid met een aantal columns uit een MySQL-tabel 'OrderRegels'. Daarnaast is er een Edit-Column, als ik op edit klik kan ik direct in de datagrid de velden van de betreffende row wijzigen. Op de plaats van de Edit-knop komen dan 'Opslaan' en 'Annuleren' zodat ik de wijzigingen kan doorvoeren, respectievelijk annuleren.

De MySQL-tabel 'OrderRegels' is aan de applicatie gekoppeld d.m.v. ODBCDataAdapter 'daOrderRegels'. Nu probeer ik met de volgende code in het EditCommand-event van de datagrid de wijzigingen op te slaan in de database:

Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Private Sub dgOrderRegels_UpdateCommand(ByVal source As Object, ByVal e As _
  System.Web.UI.WebControls.DataGridCommandEventArgs) Handles _
  dgOrderRegels.UpdateCommand
        daOrderRegels.SelectCommand.CommandText = "SELECT * FROM OrderRegels " & _
          "WHERE OrderID = '" & txtOrderID.Text & "'"
        daOrderRegels.Fill(DsOrderRegels1)
        Dim sAantal As String = CType(e.Item.Cells(2).Controls(0), TextBox).Text
        Dim sVerkoopprijs As String = CType(e.Item.Cells(3).Controls(0), TextBox).Text
        Dim dt As DataTable = DsOrderRegels1.Tables("OrderRegels")
        Dim dr As DataRow() = dt.Select("OrderRegelID = '" & _
          dgOrderRegels.DataKeys(dgOrderRegels.EditItemIndex).ToString & "'")
        dr(0)("Aantal") = sAantal
        dr(0)("Verkoopprijs") = sVerkoopprijs
        daOrderRegels.Update(dr)
        dgOrderRegels.EditItemIndex = -1
        dgOrderRegels.DataBind()
End Sub


Om de één of andere reden krijg ik als foutmelding:
ERROR [07006] [MySQL][ODBC 3.51 Driver][mysqld-4.0.15-nt]Restricted data type attribute violation(SQL_C_NUMERIC)
op de volgende regel:

Visual Basic .NET:
1
daOrderRegels.Update(dr)


Ik word niet echt wijzer van deze errormessage. Weet iemand een oplossing?

[ Voor 7% gewijzigd door EmilneM op 04-11-2003 11:47 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
Je hebt geen UpdateCommand aan je dataAdapter hangen.

https://fgheysels.github.io/


  • EmilneM
  • Registratie: December 2001
  • Laatst online: 15-09-2023
whoami schreef op 04 november 2003 @ 11:57:
Je hebt geen UpdateCommand aan je dataAdapter hangen.
Deze UpdateCommand heb ik aan de dataAdapter hangen:
SQL:
1
2
3
UPDATE orderregels
SET OrderID = ?, ArtikelID = ?, Omschrijving = ?, Aantal = ?, Verkoopprijs = ?
WHERE (OrderRegelID = ?)

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
Ik vraag me eigenlijk af waarom je eerst data gaat selecteren, die dan gaat aanpassen, en dan pas gaat updaten.

Je kan toch evengoed direct een UPDATE statement doen in je UpdateCommand Event.

https://fgheysels.github.io/


  • EmilneM
  • Registratie: December 2001
  • Laatst online: 15-09-2023
whoami schreef op 04 november 2003 @ 12:03:
Ik vraag me eigenlijk af waarom je eerst data gaat selecteren, die dan gaat aanpassen, en dan pas gaat updaten.

Je kan toch evengoed direct een UPDATE statement doen in je UpdateCommand Event.
Ik moet toch eerst aangeven wat er precies geupdate moet worden en waar de gegevens vandaan komen?

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
Je weet toch wat er moet geupdate worden als je de PK in de DataKeyField property bewaard.
Waar de gegevens vandaan komen, dat weet je ook, want in je update-command kan je aan de rij v/d datagrid die gewijzigd is.

https://fgheysels.github.io/


  • EmilneM
  • Registratie: December 2001
  • Laatst online: 15-09-2023
whoami schreef op 04 november 2003 @ 12:13:
Je weet toch wat er moet geupdate worden als je de PK in de DataKeyField property bewaard.
Waar de gegevens vandaan komen, dat weet je ook, want in je update-command kan je aan de rij v/d datagrid die gewijzigd is.
Denk dat ik niet helemaal begrijp wat je bedoelt. Als ik de dt.select weglaat wordt er niets geupdated. Wat kan ik volgens jou precies weglaten en wat niet?

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
Bestudeer dat DataGridCommandEventArgs eens dat je meekrijgt als parameter van die method.

Je werkt dus met parameters voor de SQL statement van je updatecommand?
Heb je die Parameters ook geadded aan de Parameter collection van het updatecommand, en ben je zeker dat je de goede data-types gekozen hebt?

[ Voor 55% gewijzigd door whoami op 04-11-2003 12:23 ]

https://fgheysels.github.io/


  • EmilneM
  • Registratie: December 2001
  • Laatst online: 15-09-2023
whoami schreef op 04 november 2003 @ 12:22:
en ben je zeker dat je de goede data-types gekozen hebt?
Denk dat het hier mee te maken heeft aangezien de foutmelding...... maar er is vrij weinig nuttige info over deze error te vinden.

Als ik op MSDN kijk bij UpdateCommand Event zie ik dezelfde methode als de mijne, alleen verwijderen ze daar de row eerst en vervolgens adden ze een nieuwe :? .

[ Voor 22% gewijzigd door EmilneM op 04-11-2003 12:31 ]


  • EmilneM
  • Registratie: December 2001
  • Laatst online: 15-09-2023
Voor elkaar, zat hem toch in het UpdateCommand:

SQL:
1
2
3
UPDATE orderregels
SET OrderID = ?, ArtikelID = ?, Omschrijving = ?, Aantal = ?, Verkoopprijs = ?
WHERE (OrderRegelID = ?)


Heb Omschrijving = ? en ArtikelID = ? weggelaten, omdat die toch niet geupdated worden en nu doet hij het.

  • EmilneM
  • Registratie: December 2001
  • Laatst online: 15-09-2023
Ik werk nu met TemplateColumns en nu krijg ik als foutmelding dat de conversie niet kan worden uitgevoerd op het moment dat de waarde uit de textbox binnen de datagrid wordt gehaald. Moet ik als ik de templatecolumn gebruik de data op een andere manier uit het textboxje halen?

Zo probeer ik de data er uit te halen:
Visual Basic .NET:
1
Dim sAantal As String = CType(e.Item.Cells(2).Controls(0), TextBox).Text

  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
De control die je gebruikt in de EditItemTemplate zal niet in het eerste element van de Controls collection zitten, maar in het 2de.

Je zult dus dit moeten doen:
code:
1
string s = ((TextBox)e.Item.Cells[2].Controls[1]).Text;

Let op: C# code

[ Voor 8% gewijzigd door whoami op 05-11-2003 11:44 ]

https://fgheysels.github.io/


  • EmilneM
  • Registratie: December 2001
  • Laatst online: 15-09-2023
whoami schreef op 05 november 2003 @ 11:44:
De control die je gebruikt in de EditItemTemplate zal niet in het eerste element van de Controls collection zitten, maar in het 2de.

Je zult dus dit moeten doen:
code:
1
string s = ((TextBox)e.Item.Cells[2].Controls[1]).Text;

Let op: C# code
Top, voor elkaar!

  • EmilneM
  • Registratie: December 2001
  • Laatst online: 15-09-2023
Naast een Edit-column heb ik ook een Delete-Column in dezelfde DataGrid staan. Ik krijg echter een foutmelding als het DeleteCommand_event wordt uitgevoerd. Het is precies dezelde fout als ik aan het begin van dit topic had met het EditCommand_Event.

Error:
ERROR [07006] [MySQL][ODBC 3.51 Driver][mysqld-4.0.15-nt]Restricted data type attribute violation(SQL_C_NUMERIC)

Dit is de code in het DeleteCommand_event van de datagrid:

Visual Basic .NET:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Sub dgOrderRegels_DeleteCommand(ByVal source As Object, ByVal e As _ 
   System.Web.UI.WebControls.DataGridCommandEventArgs) Handles _ 
   dgOrderRegels.DeleteCommand
        daOrderRegels.SelectCommand.CommandText = "SELECT * FROM OrderRegels " & _
          "WHERE OrderID = '" & txtOrderID.Text & "'"
        daOrderRegels.Fill(DsOrderRegels1)
        Dim dt As DataTable = DsOrderRegels1.Tables("OrderRegels")
        Dim dr As DataRow() = dt.Select("OrderRegelID = '" &   dgOrderRegels.DataKeys _
          (e.Item.ItemIndex).ToString & "'")
        dr(0).Delete()
        daOrderRegels.Update(dr)
        dgOrderRegels.DataBind()

        Totaal()
End Sub


De fout zit wederom bij de Update (regel 11).

[ Voor 6% gewijzigd door EmilneM op 05-11-2003 15:52 ]


  • whoami
  • Registratie: December 2000
  • Laatst online: 22:54
Hoe ziet het DeleteCommand eruit?
Heb je de juiste data-types aan de parameters gehangen, etc...

https://fgheysels.github.io/


  • EmilneM
  • Registratie: December 2001
  • Laatst online: 15-09-2023
whoami schreef op 05 november 2003 @ 15:53:
Hoe ziet het DeleteCommand eruit?
Heb je de juiste data-types aan de parameters gehangen, etc...
Heb ff de DeleteCommand en UpdateCommand Parameters opnieuw laten genereren en nu doet hij het. Begrijp nu eindelijk het principe van die parameters. Tnx.
Pagina: 1