1

我使用 UltraTree 方法 SetDataBinding 来显示 xml 树结构。XML 是这样的:

<?xml version="1.0" encoding="utf-8"?>
<StructDocument xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   xmlns:xsd="http://www.w3.org/2001/XMLSchema" Name="Document">
<List>  
    <StructElement Name="Number">
        <List/>
    </StructElement>    
    <StructElement Name="Author">
        <List>
            <StructElement Name="Name">
                <List>
                    <StructElement Name="FullName">
                        <List/>
                    </StructElement>
                    <StructElement Name="Adress">
                        <List/>
                    </StructElement>
                    <StructElement Name="Email">
                        <List/>
                    </StructElement>
                </List>
            </StructElement>
        </List>
    </StructElement>
</List>
</StructDocument>

比我得到以下信息:在此处输入图像描述

如您所见,缺少“名称”元素子元素的列表。但是当我像这样更改 xml 时(只需更改“编号”和“作者”元素的顺序):

<?xml version="1.0" encoding="utf-8"?>
<StructDocument xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" Name="Document">
<List>      
    <StructElement Name="Author">
        <List>
            <StructElement Name="Name">
                <List>
                    <StructElement Name="FullName">
                        <List/>
                    </StructElement>
                    <StructElement Name="Adress">
                        <List/>
                    </StructElement>
                    <StructElement Name="Email">
                        <List/>
                    </StructElement>
                </List>
            </StructElement>
        </List>
    </StructElement>
    <StructElement Name="Number">
        <List/>
    </StructElement>
</List>
</StructDocument>

,我得到以下信息:在此处输入图像描述

即现在我看到了所需的行为,并且所有 xml 元素都在屏幕上。我想问一下如何在不改变xml的情况下实现这一点?

4

1 回答 1

3

我尝试使用您的 XML 文件在一个小示例中重现您的场景,并且在两种情况下(使用两个 XML 文件)我都得到异常“名为 'List' 的列已经属于此 DataTable:无法将嵌套表名称设置为相同名称。 ”(可能是因为我的场景有点不同)

请查看随附的示例,如果您认为我没有重现您的场景,请随时修改此示例并将其还原给我。我很乐意为你重新研究它。

同时最好将您的问题发布在我们的网站http://www.infragistics.com/community/forums/上。我们很乐意为您提供帮助。

这是我的测试样本的结果

在此处输入图像描述

这是我的 XML 文件

<?xml version="1.0" encoding="utf-8"?>
<StructDocument xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   xmlns:xsd="http://www.w3.org/2001/XMLSchema" Name="Document" Description="">
  <StructElement Name="Number" Description ="Number of books 100">
  </StructElement>
  <StructElement Name="Author">
    <StructElement Name="Name" Description ="Stephen King">
      <StructElement Name="FullName" Description ="Stephen King full name">
      </StructElement>
      <StructElement Name="Adress" Description ="Stephen King address">
      </StructElement>
      <StructElement Name="Email" Description ="Stephen King email">
      </StructElement>
    </StructElement>
  </StructElement>
  <StructElement Name="Number" Description ="Number of books 20">
  </StructElement>
  <StructElement Name="Author">
    <StructElement Name="Name" Description ="George R. R. Martin">
      <StructElement Name="FullName" Description ="George R. R. Martin full name">
      </StructElement>
      <StructElement Name="Adress" Description ="George R. R. Martin address">
      </StructElement>
      <StructElement Name="Email" Description ="George R. R. Martin email">
      </StructElement>
    </StructElement>
  </StructElement>
</StructDocument>

和源代码

 private void Form1_Load(object sender, EventArgs e)
    {
        try
        {
            DataSet ds = new DataSet();
            ds.ReadXml("..\\..\\XMLFile1.xml");
            ultraTree1.DataSource = ds.Tables[0];
            ultraTree1.ExpandAll();
            ultraTree1.ColumnSettings.AutoFitColumns = Infragistics.Win.UltraWinTree.AutoFitColumns.ResizeAllColumns;
            ultraTree1.ColumnSettings.ColumnSets[0].Columns[0].Visible = false;

        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
            this.Close();
        }
    }
于 2013-08-14T10:51:49.993 回答