簡體   English   中英

表更改時自動更新數據網格

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM