【问题标题】:How to update Datagrid with OleDB?如何使用 OleDB 更新 Datagrid?
【发布时间】:2017-03-22 10:15:55
【问题描述】:

我使用以下代码填充我的数据网格 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();

现在我的问题:用户应该双击一个单元格,编辑值,离开单元格,表格应该在我的数据库中更新。

我该如何处理?

我发现它可以与 RowEditEnding 一起使用,但我不知道更新数据库的代码。

谁能帮帮我?

【问题讨论】:

    标签: c# wpf datagrid oledb


    【解决方案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 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>
    

    【讨论】:

    • 使用此代码并添加参数 var5,但更改不会在数据库中更新 cmd.CommandText = "UPDATE Folien SET Hersteller=@var1, Serie=@var2, Farbe=@var3, [EK-Preis] =@var4 WHERE FolienID = @var5";
    • 是的,执行没有问题。也许连接字符串有问题?我使用了“使用(OleDbConnection conn = new OleDbConnection(connection.ConnectionString))”和“connection.ConnectionString = @”Provider=Microsoft.Jet.OLEDB.4.0;Data Source=Database Calculator.mdb;持久安全信息=False;";" ConnectionString 正在处理显示表等。
    • 您是遇到异常还是发生了什么?
    • 什么也没发生。我在 DataGrid 中编辑一个单元格,然后关闭应用程序或转到另一个视图/页面。然后我回到我的 DataGrid,我之前编辑的单元格没有改变。
    • 查看我对 UpdateSourceTrigger 属性的修改。
    【解决方案2】:

    几乎相同的代码。您应该在 RowEditEnding 中使用 SQL 命令 UPDATE

    【讨论】:

    • 你是什么意思?
    • 这一行 command.CommandText = "SELECT Hersteller,Serie,Farbe,[EK-Preis] FROM Folien";更改为 UPDATE 命令,而不是 SELECT
    • 所以我只写:codetry { connection.Open(); OleDbCommand 命令 = 新 OleDbCommand(); command.Connection = 连接;命令。更新; command.ExecuteNonQuery();}
    • 哦,我的错,现在我知道你的意思了!泰!
    • 我需要类似“command.CommandText = “UPDATE Folien SET ...”还是可以像“command.CommandText = “UPDATE Folien”;”这样的东西?
    猜你喜欢
    • 1970-01-01
    • 2017-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多