C# 保持datagrid与mysql数据库同步
我正在WPF中试验数据绑定 我有一个绑定到mysql视图的datagrid,它将是只读的,但我希望它在对数据库进行更改时自动刷新。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(
在谷歌上找不到任何有用的东西,我也不知道从哪里开始 这是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的原生版本。