Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为数据集中的枚举属性自动生成DataGridViewComboxColumn_C#_Xml_Datagridview_Xsd_Dataset - Fatal编程技术网

C# 为数据集中的枚举属性自动生成DataGridViewComboxColumn

C# 为数据集中的枚举属性自动生成DataGridViewComboxColumn,c#,xml,datagridview,xsd,dataset,C#,Xml,Datagridview,Xsd,Dataset,在这件事上找了几个小时的答案,感到很沮丧 我有一个反序列化为数据集的.xml文件,还有一个.xsd文件,所以数据集的类型是已知的。像这样: mDataSetVariables = new DataSet(); using (var rdr = new StringReader(Properties.Resources.VariableListSchema)) { mDataSetVariables.ReadXmlSchema(rdr); } mDataSetVariables

在这件事上找了几个小时的答案,感到很沮丧

我有一个反序列化为数据集的.xml文件,还有一个.xsd文件,所以数据集的类型是已知的。像这样:

 mDataSetVariables = new DataSet();
 using (var rdr = new StringReader(Properties.Resources.VariableListSchema))
 {
     mDataSetVariables.ReadXmlSchema(rdr);
 }
 mDataSetVariables.ReadXml(filename, XmlReadMode.ReadSchema);

 dataGridView_Params.Columns.Clear();
 dataGridView_Params.DataSource = mDataSetVariables;
 dataGridView_Params.DataMember = "Variable";
.xml文件如下所示:

<?xml version="1.0" encoding="utf-8"?>
<VariableList xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <List>
    <Variable>
      <Name>kPeakPeriodAccThresh</Name>
      <Type>FixedPoint</Type>
      <Min>0.0001</Min>
      <Max>0.02</Max>
      <InitialValue>0.003</InitialValue>
      <BestValue>0.0052570276796268427</BestValue>
      <CurrentValue>0.006459431678617374</CurrentValue>
      <Enabled>true</Enabled>
    </Variable>
    < ... more variables here >
.xsd看起来像是由xsd.exe在我的Variable和VariableList类型的类上生成的:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="VariableList" nillable="true" type="VariableList" />
  <xs:complexType name="VariableList">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="1" name="List" type="ArrayOfVariable" />
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="ArrayOfVariable">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="unbounded" name="Variable" nillable="true" type="Variable" />
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="Variable">
    <xs:sequence>
      <xs:element minOccurs="0" maxOccurs="1" name="Name" type="xs:string" />
      <xs:element minOccurs="1" maxOccurs="1" name="Type" type="VariableType" />
      <xs:element minOccurs="1" maxOccurs="1" name="Min" type="xs:double" />
      <xs:element minOccurs="1" maxOccurs="1" name="Max" type="xs:double" />
      <xs:element minOccurs="1" maxOccurs="1" name="InitialValue" type="xs:double" />
      <xs:element minOccurs="1" maxOccurs="1" name="BestValue" type="xs:double" />
      <xs:element minOccurs="1" maxOccurs="1" name="CurrentValue" type="xs:double" />
      <xs:element minOccurs="1" maxOccurs="1" name="Enabled" type="xs:boolean" />
    </xs:sequence>
  </xs:complexType>
  <xs:simpleType name="VariableType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="Integer" />
      <xs:enumeration value="FixedPoint" />
      <xs:enumeration value="Boolean" />
    </xs:restriction>
  </xs:simpleType>
</xs:schema>
当我将数据集绑定到Datagridview时,启用的布尔值会自动用checkboxcolumn表示。如何使类型列自动成为带有枚举类型下拉列表的comboboxcolumn

我在网上找到了一些其他的答案,但没有一个与我的场景相符。如果我必须改变事情的安排方式,即使用强类型数据集,那么我想我会的,但我希望它能按原样使用代码


非常感谢…

问题是,就您的数据集而言,该列不是枚举,而是字符串

数据集将愉快地忽略枚举限制

如果向mDataSetVariables询问getXmlSchema,则可以验证这一点 注意从

<xs:simpleType name="VariableType">
  <xs:restriction base="xs:string">
    <xs:enumeration value="Integer" />
    <xs:enumeration value="FixedPoint" />
    <xs:enumeration value="Boolean" />
</xs:restriction>

要处理这个问题,您必须自己解析xsd,并识别枚举列,使用适当的值构建字符串数组,并将它们作为组合框的数据源提供


我会选择强类型数据集…

问题是,就您的数据集而言,该列不是枚举,而是字符串

数据集将愉快地忽略枚举限制

如果向mDataSetVariables询问getXmlSchema,则可以验证这一点 注意从

<xs:simpleType name="VariableType">
  <xs:restriction base="xs:string">
    <xs:enumeration value="Integer" />
    <xs:enumeration value="FixedPoint" />
    <xs:enumeration value="Boolean" />
</xs:restriction>

要处理这个问题,您必须自己解析xsd,并识别枚举列,使用适当的值构建字符串数组,并将它们作为组合框的数据源提供

我会选择强类型数据集