WPF c# ListView数据集,我如何更新数据库与更改用户在ListView中的数据
本文关键字:ListView 用户 数据库 数据 更新 数据集 何更新 WPF | 更新日期: 2023-09-27 18:15:48
所以我使用数据集创建了一个ListView,即在数据源窗口中为表选择ListView选项并将其拖放到我的界面上。
每个列都有一个绑定模式(TwoWay/OneWay等)。它们都被预先设置为双向的也就是说,这是我在xaml文件中的ListView片段:
<ListView x:Name="cbTableListView" Grid.ColumnSpan="2" ItemsSource="{Binding}" Margin="16,73,16,135"
SelectionChanged="onChangeRecord" SelectionMode="Single">
<ListView.ItemContainerStyle>
<Style>
<Setter Property="Control.HorizontalContentAlignment" Value="Stretch"/>
<Setter Property="Control.VerticalContentAlignment" Value="Stretch"/>
</Style>
</ListView.ItemContainerStyle>
<ListView.View>
<GridView>
<GridViewColumn x:Name="_idColumn" Header="ID" Width="60">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBox Margin="10,-1,-6,-1" Text="{Binding _id, Mode=OneWay}"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn x:Name="company_nameColumn" Header="Company Name" Width="120">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBox Margin="-6,-1" Text="{Binding company_name, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true}"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn x:Name="contact_nameColumn" Header="Contact Name" Width="120">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBox Margin="-6,-1" Text="{Binding contact_name, Mode=TwoWay, NotifyOnValidationError=true, ValidatesOnExceptions=true}"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
…其余列
依次类推我需要它,以便用户可以编辑列表视图中的行,按保存更改,并将更改保存到数据库。我猜这就是所谓的"两人行"吧?我试过在数据集上使用acceptchanges方法,似乎不起作用:
cBDataSet.AcceptChanges();
cBDataSetcbTableTableAdapter.Fill(cBDataSet.cbTable);
cbTableViewSource = ((System.Windows.Data.CollectionViewSource) (this.FindResource("cbTableViewSource")));
cbTableViewSource.View.MoveCurrentToFirst();
有人有什么想法吗?不知道我做错了什么
谢谢
Via MSDN:
AcceptChanges提交自此数据集以来所做的所有更改
这很令人困惑。人们通常只在谈论数据库时使用"commit"这个词,但是在这个例子中,MS在措辞上搞砸了。AcceptChanges对底层数据存储没有任何作用,它只是告诉数据集本身接受当前的更改,并基本上清除脏标志,并认为其中的当前数据是最新的,并且与底层存储匹配。
但是,它继续概述了DataSet的一般用法:
调用GetChanges方法来创建第二个数据集只修改数据
调用DataAdapter的Update方法,传递第二个DataSet作为参数。
调用Merge方法来合并来自第二个DataSet的更改进入第一个
调用数据集的AcceptChanges。另外,调用RejectChanges取消更改
这会让你走上正确的道路。