加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 使数据网格与mysql数据库保持同步

发布时间:2020-12-15 21:16:41 所属栏目:百科 来源:网络整理
导读:我在 WPF中试验数据绑定 我有这个绑定到mysql视图的数据网格,它只是只读,但我希望它在对数据库进行更改时自动刷新. 在谷歌找不到任何有用的东西,我不知道从哪里开始. 这是dataprovider类. class ConDataProvider{ private MySqlDataAdapter adapter; private
我在 WPF中试验数据绑定

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

这是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>

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

Data类只包含连接字符串和一些与数据库交互的方法.
你可以在这里看到它:http://pastebin.com/m9HLfwEQ

提前致谢.
希望得到一些好的建议.

解决方法

如果你连接一些 Reactive Extensions怎么样?

你可以做的是创建一个每X秒轮询你的数据库的observable.然后让你的Observer连接到那个observable.在Observer的OnNext事件中,您可以将数据添加到网格中,或重新绑定任何内容.

从本质上讲,您将创建一个位于数据库和应用程序之间的内容,用于侦听更改并将这些更改推送给您.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读