我的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中。但这不会发生。我只看到插入的数据,如果我停止调试并按下(在设计时)数据库资源管理器的刷新按钮然后再次调试...
答案 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控件的任何内容。