c# - 表格更改时自动更新数据网格
问题描述
不要向我扔石头——我是编程新手。
主要问题是如何在该表的每次更改后自动更新通过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 表中的元素填充这个VariableAssignment (context.VariableAssignments)
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 并将其放入数据网格的 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;
}
但这是不对的,对吧?我的意思是......现在为了更新数据网格,我需要在某些方法/按钮/所有内容中手动编写代码,这会改变我的表格。但我希望数据网格在从任何地方更改后自动更新。
那你能给我一些建议吗?
解决方案
不仅将 Assignment 对象添加到 db 上下文,而且同时添加到 ObservableCollection。
public void addNewVariableAssignment()
{
newVariableAssignment = new VariableAssignment();
newVariableAssignment.IdVariable = //adding values
context.VariableAssignments.Add(newVariableAssignment);
context.SaveChanges();
VariableAssignments.Add(newVariableAssignment);
}
DataGrid 将收到有关添加的新项目的通知,因为 ObservableCollection 实现了 INotifyCollectionChanged。无需重复重置 ItemsSource
推荐阅读
- reactjs - React-native 不使用 Redux 操作重新渲染
- python - Django manage.py test: “database backend does not accept 0 as a value for AutoField” (mysql)
- python - Printing a new column in a csv file with difference of two previous indexes from another column
- wordpress - WordPress Wesbsite Browser Tab Text Problem
- mongodb - MongoDB服务器警告
- python - Remaking snake need ideas on how to make snake longer and move around with a longer snake
- r - R多文件操作
- jquery - SQL Query 仅选择其中一列的最大值的数据
- java - 管道脚本尝试在 @2 工作区中创建文件
- android - 运行 React Native 应用程序时,Android Studio 是否应该启动 Metro Bundler?