2017-03-22 48 views
0

我用下面的代碼來填充我的DataGrid dgFolien:如何使用OleDB更新Datagrid?

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(); 

現在我的問題:用戶應該只是雙擊進入細胞,編輯值,離開細胞和表應該在我的數據庫進行更新。

我該如何處理?

我發現,它可以與RowEditEnding工作,但我不知道更新我的數據庫代碼的想法。

任何人都可以幫到我嗎?

回答

1

嘗試處理該事件是這樣的:

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(); 
     } 
    } 
} 

另外,還要確保你綁定的UpdateSourceTrigger屬性在XAML標記中列的值設置爲PropertyChanged立即設置: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

使用此代碼,並添加參數VAR5,但變化的數據庫不更新 cmd.CommandText =「UPDATE FOLIEN SET Hersteller = @ var1,Serie = @ var2,Farbe = @ var3,[EK-Preis] = @ var4 WHERE FolienID = @var 5" ; –

+0

代碼是否被執行? – mm8

+0

是的,沒有執行問題。也許連接字符串的問題? 我所用的 「使用(OleDbConnection的康恩=新的OleDbConnection(connection.ConnectionString))」 和 「connection.ConnectionString = @」 提供商= Microsoft.Jet.OLEDB.4.0;數據源=數據庫Calculator.mdb; 堅持安全信息=假;「;」 ConnectionString正在使用顯示錶格等。 –

0

幾乎相同的代碼。您應該使用SQL命令更新RowEditEnding

+0

你是什麼意思? –

+0

this line command.CommandText =「SELECT Hersteller,Serie,Farbe,[EK-Preis] FROM Folien」; 更改爲UPDATE命令,而不是SELECT – Slawkoo

+0

所以我只寫: 'code'試試 { connection.Open(); OleDbCommand command = new OleDbCommand(); command.Connection = connection; command.Update; command.ExecuteNonQuery();} –