如何使用 OleDB 更新 Datagrid?
How to update Datagrid with OleDB?
我使用以下代码填充我的数据网格 dgFolien:
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();
现在我的问题是:用户只需双击一个单元格,编辑值,离开该单元格,table 应该在我的数据库中更新。
我该如何处理?
我发现它可以与 RowEditEnding 一起使用,但我不知道更新数据库的代码。
谁能帮帮我?
几乎相同的代码。您应该在 RowEditEnding
中使用 SQL 命令 UPDATE
尝试像这样处理事件:
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 Hersteller=@var1, Serie=@var2, Farbe=@var3 WHERE [EK-Preis] = @var4";
cmd.ExecuteNonQuery();
}
}
}
还要确保在 XAML 标记中将绑定的 UpdateSourceTrigger
属性 设置为 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>
我使用以下代码填充我的数据网格 dgFolien:
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();
现在我的问题是:用户只需双击一个单元格,编辑值,离开该单元格,table 应该在我的数据库中更新。
我该如何处理?
我发现它可以与 RowEditEnding 一起使用,但我不知道更新数据库的代码。
谁能帮帮我?
几乎相同的代码。您应该在 RowEditEnding
中使用 SQL 命令 UPDATE尝试像这样处理事件:
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 Hersteller=@var1, Serie=@var2, Farbe=@var3 WHERE [EK-Preis] = @var4";
cmd.ExecuteNonQuery();
}
}
}
还要确保在 XAML 标记中将绑定的 UpdateSourceTrigger
属性 设置为 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>