2017-03-22 5 views
0

Ich verwende den folgenden Code mein Datagrid dgFolien zu füllen:Wie aktualisiert man Datagrid mit OleDB?

connection.Open(); 
OleDbCommand command = new OleDbCommand(); 
command.Connection = connection; 
command.CommandText = "SELECT Hersteller,Serie,Farbe,[EK-Preis] FROM Folien"; 

command.ExecuteNonQuery(); 

OleDbDataAdapter dataAdp = new OleDbDataAdapter(command); 
DataTable dt = new DataTable("Folien"); 
dataAdp.Fill(dt); 
dgFolien.ItemsSource = dt.DefaultView; 
dataAdp.Update(dt); 

connection.Close(); 

Nun mein Problem: Der Benutzer sollte einen Doppelklick nur in eine Zelle, um den Wert bearbeiten, lassen Sie die Zelle und die Tabelle sollte in der Datenbank aktualisiert werden.

Wie kann ich damit umgehen?

Ich habe festgestellt, dass es mit RowEditEnding arbeiten kann, aber ich habe keine Ahnung über den Code zum Aktualisieren meiner Datenbank.

Jeder kann mir helfen?

Antwort

1

Versuchen nutzen die Veranstaltung, so etwas zu handhaben:

private void dgFolien_RowEditEnding(object sender, DataGridRowEditEndingEventArgs e) 
{ 
    DataRowView drv = e.Row.DataContext as DataRowView; 
    if (drv != null) 
    { 
     using (OleDbConnection conn = new OleDbConnection("yourConnectionString...")) 
     { 
      conn.Open(); 
      OleDbCommand cmd = conn.CreateCommand(); 
      cmd.Parameters.Add(new OleDbParameter("@var1", drv["Hersteller"].ToString())); 
      cmd.Parameters.Add(new OleDbParameter("@var2", drv["Serie"].ToString())); 
      cmd.Parameters.Add(new OleDbParameter("@var3", drv["Farbe"].ToString())); 
      cmd.Parameters.Add(new OleDbParameter("@var4", drv["EK-Preis"].ToString())); 


      cmd.CommandText = "UPDATE Folien SET [email protected], [email protected], [email protected] WHERE [EK-Preis] = @var4"; 
      cmd.ExecuteNonQuery(); 
     } 
    } 
} 

Auch stellen Sie sicher, dass Sie die UpdateSourceTrigger Eigenschaft der Bindung an PropertyChanged in der XAML-Markup für die Spaltenwerte gesetzt sofort eingestellt werden: Datagrid.RowEditEnding doesn't return the update value

<DataGrid x:Name="dgFolien" AutoGenerateColumns="False" CanUserAddRows="False" HorizontalAlignment="Left" 
        Height="268" Margin="10,138,0,0" VerticalAlignment="Top" Width="489" ColumnWidth="*" RowEditEnding="dgFolien_RowEditEnding"> 
    <DataGrid.Columns> 
     <DataGridTextColumn Header="Hersteller" Binding="{Binding Hersteller, UpdateSourceTrigger=PropertyChanged}" /> 
     <DataGridTextColumn Header="Serie" Binding="{Binding Serie, UpdateSourceTrigger=PropertyChanged}" /> 
     <DataGridTextColumn Header="Farbe" Binding="{Binding Farbe, UpdateSourceTrigger=PropertyChanged}" /> 
     <DataGridTextColumn Header="EK-Preis" Binding="{Binding EK-Preis, UpdateSourceTrigger=PropertyChanged}" /> 
    </DataGrid.Columns> 
</DataGrid> 
+0

Verwendete diesen Code und fügte Parameter var5 hinzu, aber Änderungen werden nicht in Datenbank aktualisiert cmd.CommandText = "UPDATE Folien SET Hersteller = @ var1, Serie = @ var2, Farbe = @ var3, [EK-Preis] = @ var4 WHERE FolienID = @var 5 "; –

+0

Wird der Code ausgeführt? – mm8

+0

Ja, keine Probleme bei der Ausführung. Vielleicht Probleme mit der Verbindungszeichenfolge? Ich verwendete "(OleDbConnection conn = neue OleDbConnection (connection.ConnectionString))" und "connection.ConnectionString = @" Provider = Microsoft.Jet.OLEDB.4.0; Datenquelle = Datenbank Calculator.mdb; Persist Sicherheitsinfo = False; ";" ConnectionString arbeitet mit der Tabelle und so weiter. –

0

Fast der gleiche Code. Sie sollten SQL-Befehl UPDATE in RowEditEnding

+0

Wie meinst du das? –

+0

Diese Zeile command.CommandText = "SELECT Hersteller, Serie, Farbe, [EK-Preis] VON Folien"; Wechsel zum UPDATE-Befehl, nicht SELECT – Slawkoo

+0

10 Also schreibe ich einfach: 'code' try { connection.Open(); OleDbCommand command = new OleDbCommand(); command.Connection = Verbindung; Befehl.Update; command.ExecuteNonQuery();} –

Verwandte Themen