如何解决与Datagridwpf的DataTable关系问题
| 我遇到一个使我发疯的问题。 我创建了一个具有datarelations的DataSet,我希望它以父/子方式显示。 为了简单起见,我只有2个表: 用id(int)(PK),col1(string)测试 带有id(int)(PK)(FK-> test> id)的test1,col1(字符串) 我在test和test2之间创建了这样的关系:datarelation rel = new datarelation(\"testRel\",new DataColumn[] { database1DataSet.test.IDColumn },new DataColumn[] { database1DataSet.test1.idColumn });
我将包含两个Datagrid的Grid的DataContext设置为
<Grid DataContext=\"{Binding Source={StaticResource database1DataSet},Path=test}\">
然后我创建了两个DataGrid。第一个:
<DataGrid IsSynchronizedWithCurrentItem=\"True\" Name=\"dataGrid1\" ItemsSource=\"{Binding}\">
第二个:
<DataGrid IsSynchronizedWithCurrentItem=\"True\" ItemsSource=\"{Binding Path=testRel}\" Name=\"dataGrid2\">
列当然绑定到正确的ColumnID。
您可以循环到父网格,而子网格元素也会更改,就像我想要的那样。
当您向子网格添加新行时(通过NewItemPlaceholder),它将自动完成关系值,在这种情况下,test1中的id值是从选定的父行(test的列ID)中获取的,就像您期望的那样它起作用。
现在,如果您通过填写NewItemPlaceholder并按\“ Enter \”提交将新行添加到MASTER网格中,则该项目将在主网格中创建,并且也将提交到数据库中。但是,如果您尝试为此添加子行(新添加的主行),则会发生奇怪的行为。
您在子数据网格中单击NewItemPlaceholder。首先要注意的是,不会像对现有行那样自动完成id值。第二个是该行在从第二个网格按回车键后立即消失。您甚至无法通过循环遍历父网格再次使其可见。 (虽然数据集中的行)。如果您重新运行该应用程序,则会出现新添加的行,并按预期工作。
如果您使用编程方式添加新行
database1DataSet.test.AddtestRow(4,\"asd\");
杂乱的行为不会发生。
问题是:为什么通过datagrid向数据表添加新行与以编程方式进行添加有何不同?如何解决/建立一个好的解决方法?
提前致谢
附言如果您需要代码,可以在以下位置下载
https://rapidshare.com/files/2456035623/WpfApplication1.zip(VS2010解决方案)
解决方法
我自己遇到了同样的问题,直到在主列上添加了AutoIncrement,AutoIncrementSeed和AutoIncrementStep。
test.Columns[\"ID\"].AutoIncrement = true;
test.Columns[\"ID\"].AutoIncrementSeed = -1;
test.Columns[\"ID\"].AutoIncrementStep = -1;
在两个表(test和test1)上都添加了上面的代码之后,子网格将使用主网格中的正确ID更新。
,好吧,真正糟糕的解决方法是订阅该特定数据表的rowchanged事件,然后创建该类型的新行,并将传递给该事件的行中的值复制到该行中。 (当然,仅当事件是添加事件时)。之后,您必须删除当前行,并通过调用数据表的AddRow()插入新创建的行。
当然,这真的很烦
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。