我想创建可编辑的DataGrid,其单元格可以是只读的或可编辑的(通过DoubleClicking)... 我想将所有编辑的单元格保存到数据库中(通过实体框架)...
然后在某些列中,我需要显示一个组合框而不是文本字段。
我如何实现这一目标?
答案 0 :(得分:3)
使用此代码:
public class Window2Viewmodel : INotifyPropertyChanged
{
public Window2Viewmodel()
{
MyDbContext myDbContext = new MyDbContext();
Customers = new ObservableCollection<Customer>(myDbContext.Customers.Include("Cars").ToList());
SaveCommand = new RelayCommand(() =>
{
myDbContext.SaveChanges();
});
}
private ObservableCollection<Customer> _customers;
public ObservableCollection<Customer> Customers
{
get { return _customers; }
set
{
if (_customers != value)
{
_customers = value;
OnPropertyChanged();
}
}
}
public event PropertyChangedEventHandler PropertyChanged = delegate { };
public void OnPropertyChanged([CallermemberNmae]string propertyName = null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
public RelayCommand SaveCommand { get; set; }
}
这个XAML代码:
<Window.Resources>
<local:Window2Viewmodel x:Key="VM"/>
</Window.Resources>
<Grid DataContext="{Binding Source={StaticResource VM}}">
<DataGrid Name="testDataGrid" ItemsSource="{Binding Customers}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Binding="{Binding FName}" Header="Name"/>
<DataGridTextColumn Binding="{Binding LName}" Header="Lastname"/>
</DataGrid.Columns>
</DataGrid>
<Button Content="Save" VerticalAlignment="Bottom" Command="{Binding SaveCommand}"/>
</Grid>
答案 1 :(得分:2)
取决于您是否使用MVVM。
无论哪种方式,您都需要确定要保存的方式。有保存按钮吗?或者编辑后立即保存。 (最后一个对你的数据库很糟糕,但由你决定)
编辑会生成您可以捕获的事件。同时单击“保存”按钮会产生一个事件。
保存按钮 所以我们假设您需要一个保存按钮。
然后当按钮单击事件发生时,您将调用代码保存到数据库。在不知道你的数据库的情况下,我不能真正告诉你更多,除了这应该是一个不同的线程,所以它不会发生在UI线程上。查看Task.Run以获取更多信息。
保存编辑 基本上与上面相同,但你最终会更频繁地与你的数据库交谈。每个按键真的,这就是为什么你的数据库更难。 基本上,您可以捕获按键或键盘事件,然后将信息保存到数据库中。