[英]Automatic update of data grid when table changes
不要對我投擲石塊-我在編程方面是個新手。
主要問題是在表中的每次更改后,如何通過Enity Framework自動更新代表SQL表的datagrid?
我使用WPF創建了一個簡單的應用程序,用於通過Entity Framework 6處理SQL表。該應用程序包含一部分圖像:
所以有一個數據網格,看起來像這樣:
<DataGrid CanUserAddRows="False" AutoGenerateColumns="False" x:Name="variableAssignmentDataGrid" ItemsSource="{Binding VariableAssignment,UpdateSourceTrigger=PropertyChanged}" Margin="30" >
<DataGrid.Columns>
<DataGridTextColumn Width="1*" Binding="{Binding Id}" Header="Id" IsReadOnly="True" />
<DataGridTextColumn Width="1*" Binding="{Binding IdMachine}" Header="IdMachine"/>
<DataGridTextColumn Width="1*" Binding="{Binding IdVariable}" Header="IdVariable"/>
<DataGridTextColumn Width="1*" Binding="{Binding IdUser}" Header="Id User"/>
<DataGridTextColumn Width="1*" Binding="{Binding Variable.Name}" Header="Name"/>
<DataGridTextColumn Width="1*" Binding="{Binding Subscription}" Header="Subscription"/>
<DataGridTextColumn Width="1*" Binding="{Binding Frequency}" Header="Frequency"/>
<DataGridCheckBoxColumn Width="1*" Binding="{Binding Enable,Mode=TwoWay}" Header="Enable"/>
<DataGridTextColumn Width="1.75*" Binding="{Binding Time}" Header="Time" FontSize="8"/>
<DataGridTemplateColumn Width="1*" Header="Modify" />
</DataGrid.Columns>
</DataGrid>
用於綁定的VariableAssignment如下所示:
public class DataManager : INotifyPropertyChanged
{
public Entities context = new Entities();
private ObservableCollection<VariableAssignment> variableAssignment;
public ObservableCollection<VariableAssignment> VariableAssignment
{
get { return variableAssignment; }
set { variableAssignment = value; OnPropertyChanged("VariableAssignment"); }
}
..}
在此類的構造函數中,我用SQL表中的元素(context.VariableAssignments)填充此VariableAssignment 。
public DataManager()
{
VariableAssignment = new ObservableCollection<VariableAssignment>(context.VariableAssignments);
newVariableAssignment = new VariableAssignment();
}
如您所見,在此構造函數中,我定義了newVariableAssignment = new VariableAssignment(); -我需要在SQL表中添加新行。
添加方法在這里
public void addNewVariableAssignment(..)
{
context.VariableAssignments.Add(newVariableAssignment);
newVariableAssignment.IdVariable = //adding values
context.SaveChanges();
}
單擊添加按鈕后,可以使用此方法。
private void addVariableButton_Click(object sender, RoutedEventArgs e)
{
dataManager.addNewVariable(..);
}
單擊添加按鈕后-行被添加到SQL表中,但我的數據網格未更新。 如您所見,我嘗試了UpdateSourceTrigger,但是由於某種原因,它不起作用。 我找到了更新數據網格的唯一方法-單擊按鈕后,創建表的新ObservableCollection並將其放入datagrid的ItemsSource中(請參見下文)
private void addVariableButton_Click(object sender, RoutedEventArgs e)
{
dataManager.addNewVariable(addNameVariableTextBox.Text, addAddressTexBox.Text, addVariableTypeComboBox.Text, addSourceTypeAddComboBox.Text);
var varAssignSource = new ObservableCollection<VariableAssignment>(dataManager.context.VariableAssignments);
variableAssignmentDataGrid.ItemsSource = varAssignSource;
}
但這不對吧? 我的意思是...現在要更新數據網格,我需要在某些方法/按鈕/所有內容中手動編寫代碼,這會改變我的表。 但我希望datagrid在任何地方更改后都能自動更新。
那你能給我一些建議嗎?
將Assignment對象不僅添加到db上下文,還同時添加到ObservableCollection。
public void addNewVariableAssignment()
{
newVariableAssignment = new VariableAssignment();
newVariableAssignment.IdVariable = //adding values
context.VariableAssignments.Add(newVariableAssignment);
context.SaveChanges();
VariableAssignments.Add(newVariableAssignment);
}
因為ObservableCollection實現了INotifyCollectionChanged,所以將通知DataGrid有關添加的新項目的信息。 無需重復重置ItemsSource
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.