2011-06-14 110 views
0

我在我的WPF程序中有一個本地的Microsoft SQL Server Compact 3.5數據庫(.sdf)。以編程方式刷新數據庫?

在我的數據網格中,我看到「舊」數據。只有當我單擊Visual Studio 2010中的數據庫資源管理器中的刷新時,才能看到新插入的數據。

如何以編程方式刷新數據庫連接?

要明確:

在我PROGRAMM的負載我把數據記錄到數據庫與SQL查詢類似INSERT INTO clients VALUE (2, Peter, Smith) 然後調用EEN的tableAdapter.Fill(dataset.clients)this.DataContext = dataset.clients.DefaultView;

我希望DataTable中的dataSet將填充我在數據庫中第二次插入的數據。之後數據顯示在dataGrid中。但那不會發生。我只看到插入的數據,如果我停止調試並按(在設計時)數據庫瀏覽器的刷新按鈕,然後再次調試...

+5

你所要求的沒有多大意義。要刷新應用中的數據,請重新查詢數據庫。要在數據庫瀏覽器中刷新,請單擊刷新。你的意思是你在數據庫資源管理器中插入數據,但它沒有提交,直到你點擊刷新那裏? – 2011-06-14 15:13:28

+0

@Kieren我通過一些SQL代碼插入數據,並沒有顯示在我的dataGrid中。只有在數據庫瀏覽器中按「刷新」並再次調試纔會顯示數據。 – 2011-06-14 15:15:58

+1

您是否打算在'設計時'進行此更新? – 2011-06-14 15:16:25

回答

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();

如果是這樣,我可以建議它不應該/無關緊要,因爲網格上顯示的數據僅僅是一個'佔位符」。如果你確實想要看到新鮮的數據,那麼你唯一的選擇是你的建議:'刷新'通過數據庫瀏覽器。

這很不清楚你看到或期待什麼。建議使用您的代碼編輯您的問題,以及一些截圖來說明。

+0

我編輯了我的問題Ik希望你現在明白嗎? – 2011-06-14 15:33:52

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控件。

+0

也許這就是問題,但.databind()不存在!我在WPF中創建它,我該如何做到這一點(對不起,我是一個初學者..) – 2011-06-14 15:24:30

+0

您是否在DataGrid xaml中指定了ItemSource =「{Binding}」。 – Xaisoft 2011-06-14 15:42:04

+0

我已經有..... – 2011-06-14 15:43:48

相關問題