我会尽可能清楚地说明这一点,但我很清楚我可能问错了问题。我在 WPF (.NET 4.0) 中有一个 datagrd,我将它绑定到数据集中的数据表。相关的代码隐藏(在窗口加载时运行)是:
// create a connection to Top Trumps database
String cs = ConfigurationManager.ConnectionStrings["csTopTrumps"].ConnectionString;
SqlConnection cn = new SqlConnection(cs);
// create a new dataset
DataSet ds = new DataSet();
// open the connection (not strictly necessary, as the
// data adapter will do this when you use it anyway)
cn.Open();
// fill data table called Cards with contents of tblCard
SqlDataAdapter daCards = new SqlDataAdapter();
daCards.SelectCommand =
new SqlCommand("SELECT * FROM tblCard ORDER BY CardTitle", cn);
daCards.Fill(ds, "Cards");
// now set the data context for the entire window
this.DataContext = ds;
我的数据网格定义开始:
<DataGrid ItemsSource="{Binding Tables[Cards]}"
所有这些都很好,我理解。我现在想以两种方式进行数据绑定,以便在数据网格中所做的更改将更新回底层数据库。我知道我可以做到这一点的一种方法是获取已更改行的值并使用带有 Update 方法的 tableadapter 将所做的任何更改写回底层数据库(可能是在 SelectedCellsChanged 事件或类似事件上)。但是,任何这样的方法都很难实现,因为在 WPF 的代码隐藏中获取单元格值很困难(我的理解是这是错误的方法,因为我应该使用 WPF 框架,所以请帮助我)。
那么......我如何设置双向数据绑定来为我完成工作?我见过人们提到设置 datagrid 属性,例如:
SelectedItem="{Binding Path=SelectedIndex,Mode=TwoWay}"
但我不明白如何让它与数据适配器和数据集一起使用。我不想要任何涉及 MVVM 或模型的解决方案,因为我没有使用这些(是的,我可能应该使用,我知道)。我还想避免大量复杂的 C# 代码,包括可观察的集合、通过控制层次结构递归搜索以查找父对象等。
我已经搜索了很长时间,我认为我所要求的确实存在 - 如果不存在,请告诉我它不存在,并为浪费您的时间道歉,温柔的读者!