【发布时间】:2011-05-26 17:12:36
【问题描述】:
首先,我告诉我的数据集如何通过 xsd 文件解释 xml。问题的xml元素应该是KeyValuePair,我的xsd中对应的行是这样的
<xs:element name="MyKeyValuePair" msdata:DataType="System.Collections.Generic.KeyValuePair`2[[System.Guid, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]], mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" type="xs:anyType" />
xsd 加载到 DataSet 如下:
myDataSet.ReadXmlSchema(new StringReader(myXsdString));
这很好用,因为我可以在调试器中检查列的 DataType 是否正确(我有一些字符串、一些双精度数、一些 System.Guid 等,当然还有我的 KeyValuePair)。然后我用
加载xmlmyDataSet.ReadXml(new StringReader(myXmlString));
xml 看起来是这样的
<DataSet>
<DataTable>
<MyGuid>8F6FC345-5362-4518-B652-0CC3AD54901E</MyGuid>
<MyKeyValuePair>[67b7fdd1-2079-4311-a7a3-cd2fb0b31384, myValue]</MyKeyValuePair>
<MyBool>0</MyBool>
</DataTable>
</DataSet>
所有类型都被正确解析,但显然DataSet不知道如何解析泛型KeyValuePair。如何告诉 DataGrid 如何解析特定类型?我的猜测是以某种方式使用 TypeConverters,但究竟如何?谢谢
【问题讨论】:
-
您如何看待/喜欢将 K-V 对编码到数据库中?
-
暂时没关系。 .NET 中的 ToString 方法会生成“[key, value]”,所以我可能会在我的 TSQL 中将这样的字符串拼接在一起,但如果我只将键放入我的 xml 和一些额外的 xml,那就更好了描述字典以映射此类对的元素。该应用程序是我将一个表映射到一个 DataGrid 并且外键显示为 Combobox 以供选择。在这个组合框中,我想显示一个可读的描述,而不是 guid...