如何在 GridView 中使用数据集显示 xml 字符串

本文关键字:数据集 显示 xml 字符串 GridView | 更新日期: 2023-09-27 18:32:16

为了在网格视图中显示 xml 字符串,我应该在 aspx 中使用什么?

Data是 xml 字符串:

<Study>
      <DocTypes>
        <DocType>
          <Name>doctype1</Name>
          <Evaluate>false</Evaluate>
        </DocType>
        <DocType>
          <Name>doctype2</Name>
          <Evaluate>true</Evaluate>
        </DocType>
      </DocTypes>
      <DocumentView>true</DocumentView>
      <ColumnarView>true</ColumnarView>
</Study>

在 Display 后面的代码中.aspx.cs我使用 XmlTextReader,然后将 GridView 与 DataSet 绑定:

        StringReader sr = new StringReader(Data);
        XmlTextReader xtr = new XmlTextReader(sr);
        DataSet ds = new DataSet();
        ds.ReadXml(xtr);
        GridView1.DataSource = ds;
        GridView1.DataBind();

我应该在显示中写什么.aspx?

<asp:GridView ID="GridView1" runat="server">
 <Column> ???? </Column>    

编辑 我使用数据集发现。表[数字] 我可以显示内容,但我也得到了一些奇怪的列_ID。如何删除_ID列?

编辑 现在我看不到数据集中的文档类型。我也应该用什么来显示它们?

如果我更改数据集的数量,则进行编辑。表[数字] 我得到文档类型和文档类型权限,但如何合并表???

如何在 GridView 中使用数据集显示 xml 字符串

当您将 xml 加载到数据集中时,ite 会在数据集中创建 3 个表:

  1. 研究
  2. 文档类型和
  3. 文档类型

它还创建数据关系。这种关系基于具有隐藏列映射的列,据我所知,此字段的命名约定是父表FieldName_Id。如果要将数据保存回 XML,则需要此字段。

要在网格视图中隐藏此字段,我将设置自动生成列="false",并仅填充网格中所需的字段。如果要将其设置为 true,则必须在 GridView 的 RowDataBound 事件中将此单元格的可见性设置为 false: e.Row.Cells[2].Visible = false;

现在您知道了表名称及其字段名称,可以轻松地将它们绑定到 GridView。将网格视图绑定到"文档类型"表,如示例中所示。

回答您的第三次编辑,您不需要合并表格。您将重复行绑定到 GridView,只需使用标签或文本框或复选框即可显示非重复行,即文档视图和列视图。

您可以在PageLoad中调用一个方法,如下所示:

 protected void Page_Load(object sender, EventArgs e)
 {
      if (!IsPostBack)
      {
           BindData();
      }
 }

BindData() 方法中的 Ans 可能如下所示:

private void BindData()
{
    DataSet ds = LoadXml();
    GridView1.DataSource = ds.Tables["DocType"];
    GridView1.DataBind();
    DataRow r = ds.Tables["Study"].Rows[0];
    chkDocumentView.Checked = bool.Parse(r[1].ToString());
    chkColumnarView.Checked = bool.Parse(r[2].ToString());
}

现在,读取 xml 字符串的方法:

private DataSet LoadXml() 
{
    string Data = @"<Study>
                        <DocTypes>
                        <DocType>
                            <Name>doctype1</Name>
                            <Evaluate>false</Evaluate>
                        </DocType>
                        <DocType>
                            <Name>doctype2</Name>
                            <Evaluate>true</Evaluate>
                        </DocType>
                        </DocTypes>
                        <DocumentView>true</DocumentView>
                        <ColumnarView>true</ColumnarView>
                </Study>";
    StringReader sr = new StringReader(Data);
    XmlTextReader xtr = new XmlTextReader(sr);
    DataSet ds = new DataSet();
    ds.ReadXml(xtr);
    return ds;           
}

以及 GridView 和复选框的标记:

<asp:GridView ID="GridView1" AutoGenerateColumns="false" runat="server">
    <Columns>
        <asp:BoundField DataField="Name" />  
        <asp:TemplateField>
            <ItemTemplate>
                <asp:CheckBox Text="Evaluate" runat="server" Checked='<%#bool.Parse(Eval("Evaluate").ToString())%>'/>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>
<asp:CheckBox ID="chkDocumentView" Text="DocumentView" runat="server" />
<asp:CheckBox ID="chkColumnarView" Text="ColumnarView" runat="server"/>

希望对您有所帮助!

我认为这会对你有所帮助。

  StringReader sr = new StringReader(data);
  XmlTextReader xtr = new XmlTextReader(sr);
  DataSet ds = new DataSet();
  ds.ReadXml(xtr);
  ds.Merge(ds, true);
  GridView1.DataSource = ds.Tables[1];
  GridView1.DataBind();

也请通过此链接,

http://support.microsoft.com/kb/317662