Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/57.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 保持datagrid与mysql数据库同步_C#_Mysql_Wpf_Data Binding - Fatal编程技术网

C# 保持datagrid与mysql数据库同步

C# 保持datagrid与mysql数据库同步,c#,mysql,wpf,data-binding,C#,Mysql,Wpf,Data Binding,我正在WPF中试验数据绑定 我有一个绑定到mysql视图的datagrid,它将是只读的,但我希望它在对数据库进行更改时自动刷新。 在谷歌上找不到任何有用的东西,我也不知道从哪里开始 这是dataprovider类 class ConDataProvider { private MySqlDataAdapter adapter; private Data data; private DataTable table; public ConDataProvider(

我正在WPF中试验数据绑定

我有一个绑定到mysql视图的datagrid,它将是只读的,但我希望它在对数据库进行更改时自动刷新。
在谷歌上找不到任何有用的东西,我也不知道从哪里开始

这是dataprovider类

class ConDataProvider
{
    private MySqlDataAdapter adapter;
    private Data data;
    private DataTable table;

    public ConDataProvider(string query)
    {
        data = new Data();
        table = new DataTable("con_FullGrid");
        adapter = data.getAdapter(query);
        adapter.Fill(table);
    }
    public DataView GetDView()
    {
            dv = new DataView();
            dv.Table = table;
            return dv;
    }
}
和窗口的XAML

<Window x:Class="HelioWPF_Alpha01.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:local="clr-namespace:HelioWPF_Alpha01"
    xmlns:sys="clr-namespace:System;assembly=mscorlib"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="676" Width="924" MinHeight="300" MinWidth="463" Background="{x:Null}">
<Window.Resources>
    <ObjectDataProvider x:Key="ConDataProvider" ObjectType="{x:Type local:ConDataProvider}">
        <ObjectDataProvider.ConstructorParameters>
            <sys:String>SELECT * FROM con_FullGrid</sys:String>
        </ObjectDataProvider.ConstructorParameters>
    </ObjectDataProvider>
    <ObjectDataProvider x:Key="btable" ObjectInstance="{StaticResource ConDataProvider}"
                        MethodName="GetDView"/>

</Window.Resources>
<Grid Name="mainGrid" DataContext="{Binding Source={StaticResource btable}" KeyDown="mainGrid_KeyDown" FlowDirection="LeftToRight" >
    <DataGrid AutoGenerateColumns="True" ItemsSource="{Binding}" Name="dataGrid1" FrozenColumnCount="20" RowHeight="25" Grid.ColumnSpan="4" ColumnWidth="*" MouseDoubleClick="dataGrid1_MouseDoubleClick" SelectionMode="Single" Grid.Row="2" Grid.Column="1" TabIndex="1" GotKeyboardFocus="dataGrid1_GotKeyboardFocus">
        <DataGrid.AlternatingRowBackground>
            <LinearGradientBrush EndPoint="1,0.5" StartPoint="0,0.5">
                <GradientStop Color="Black" Offset="0" />
                <GradientStop Color="#16436DF8" Offset="0" />
            </LinearGradientBrush>
        </DataGrid.AlternatingRowBackground></DataGrid>
</Grid>

从con_FullGrid中选择*

我一直在做的是通过在后台代码中重新初始化ConDataProvider类并在各种事件上重新绑定datagrid来假装它。 但这是一个丑陋的黑客行为。
如果有必要的话,我不介意重新设计整件事

数据类只包含连接字符串和一些与数据库交互的方法。 你可以在这里看到:

提前感谢。

希望能得到一些好的建议。

如果你能联系一些,怎么样

您可以做的是创建一个可观察对象,每X秒轮询一次数据库。然后让你的观察者连接到那个可观察者。在Observer的OnNext事件中,您可以将数据添加到网格中,或者重新绑定,无论什么


本质上,您将创建一个位于数据库和应用程序之间的东西,用于侦听更改并将这些更改推送到您手中。

每当数据库中的数据发生更改时,MySQL都会在日志中追加信息。此功能可能必须启用,但不确定默认情况下是否启用

有了它,您可以在服务器端运行一个服务,该服务将侦听MySQL表上的更改,并在表更新时向客户端发送事件

客户端需要实现代码,以便在从服务器接收到此类事件时刷新网格

要扫描bin日志以查找更改,可以使用bin日志实用程序


如果数据量或事务量很大,我将使用这种方法,而不是扫描表中的数据更改。否则轮询数据库的方法应该可以很好地工作。

不确定MySql,但Microsoft SQL有Service Broker,它有通知服务。谢谢,我必须研究一下。Noob问题:我是否可以让它在服务器端运行,只是观察数据库,然后在有新数据时向应用程序报告,而不是让客户端像在DB server中那样不断地从数据库获取数据?据我所知没有。至少不是天生的。您可以编写一个位于同一个框上的服务,并通知您的客户端应用程序。但它不是MySql的原生版本。