以编程方式刷新数据库

时间:2011-06-14 15:11:33

标签: c# wpf visual-studio-2010

我的WPF程序中有一个本地Microsoft SQL Server Compact 3.5数据库(.sdf)。

在我的数据网格中,我看到“旧”数据。仅当我在Visual Studio 2010中的数据库资源管理器中单击“刷新”时,才能看到新插入的数据。

如何以编程方式刷新数据库连接?

要明确:

在我的程序加载时,我使用INSERT INTO clients VALUE (2, Peter, Smith)等SQL查询将数据输入数据库 然后我打电话给tableAdapter.Fill(dataset.clients)this.DataContext = dataset.clients.DefaultView;

我希望dataSet中的dataTable将填充我在数据库中插入的数据。之后,数据显示在dataGrid中。但这不会发生。我只看到插入的数据,如果我停止调试并按下(在设计时)数据库资源管理器的刷新按钮然后再次调试...

2 个答案:

答案 0 :(得分:1)

如果您尝试从SQL CE数据库进行绑定,请考虑实现使用数据绑定的代码。这将确保您的数据始终在您的网格上“新鲜”。以下是Data Binding in WPF上的一些示例代码。

SqlConnection con = new SqlConnection();
SqlDataAdapter ad = new SqlDataAdapter();
SqlCommand cmd = new SqlCommand();
String str = "SELECT EmployeeID, FirstName, LastName, BirthDate, City, Country FROM Employees";
cmd.CommandText = str;
ad.SelectCommand = cmd;
con.ConnectionString = "Data Source=MyData.sdf;Persist Security Info=False";
cmd.Connection = con;
DataSet ds = new DataSet();
ad.Fill(ds);
ListViewEmployeeDetails.DataContext = ds.Tables[0].DefaultView;
con.Close();

....

<Grid x:Name="Grid1">
  <ListView Name="ListViewEmployeeDetails" Margin="4,20,40,100" ItemTemplate="{DynamicResource EmployeeTemplate}" ItemsSource="{Binding Path=Table}">
    <ListView.View>         
      <GridView>
        <GridViewColumn Header="Employee ID" DisplayMemberBinding="{Binding Path=EmployeeID}"/>
        <GridViewColumn Header="First Name" DisplayMemberBinding="{Binding Path=FirstName}"/>
        <GridViewColumn Header="Last Name" DisplayMemberBinding="{Binding Path=LastName}"/>
        <GridViewColumn Header="BirthDate" DisplayMemberBinding="{Binding Path=BirthDate}"/>
        <GridViewColumn Header="City" DisplayMemberBinding="{Binding Path=City}"/>
        <GridViewColumn Header="Country" DisplayMemberBinding="{Binding Path=Country}"/>
      </GridView>
    </ListView.View>
  </ListView>
</Grid>

听起来好像您希望在设计时中看到网格中的“新鲜”数据。 “在数据库资源管理器中单击刷新”表示您正在查看的设计图面。

如果没有,那么您在数据库资源管理器和运行时的任何内容的声明都没有意义。您的网格应该在有意义的事件(表单加载,用户单击按钮,用户插入行)上重新填充/数据绑定。用户不/不应该知道数据库资源管理器。让网格显示最新数据的正确方法是myGrid.DataBind();

如果是这样,我可以建议它不应该/不重要,因为网格上显示的数据只是一个“占位符”。如果您 希望查看新数据,那么您唯一的选择就是建议:通过数据库资源管理器“刷新”。

目前还不清楚你所看到或期待的是什么。建议使用您的代码编辑您的问题,并提供一些屏幕截图来说明。

答案 1 :(得分:0)

如果通过T-SQL插入一些数据,则不会刷新DataGrid。您必须在网格上调用DataBind,例如:

DataGrid1.DataBind(); //if you want the data to be refreshed.

我不确定你是如何设置的,但我们假设你有一个按钮来点击时插入数据。在点击事件中,插入数据后,只需调用:

DataGrid1.DataBind(); //and you should see your data refreshed.

DataGrid1重命名为您调用DataGrid控件的任何内容。