别对我投掷石头-我在编程方面是个新手。
主要问题是在表中的每次更改后,如何通过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在任何地方更改后都能自动更新。
那么你能给我一些建议吗?
答案 0 :(得分:0)
不仅将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