如何在GridView中使用DataSet显示xml-string

时间:2013-09-20 08:45:04

标签: c# asp.net gridview dataset

我应该在aspx中使用什么才能在gridview中显示xml-string?

Data是xml-string:

<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();

我应该在display.aspx中写什么?

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

编辑我发现使用dataset.Tables [number]我可以显示内容,但我也会得到一些带有_ID的奇怪列。如何删除_ID列?

编辑现在我无法在DataSet中看到DocType。我应该用它来显示它们?

编辑,如果我更改数据集的数量。表[数字]我得到Doctypes和DocTypePermissions但如何合并表???

2 个答案:

答案 0 :(得分:0)

我认为这会对你有帮助。

  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

答案 1 :(得分:0)

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

  1. 学习
  2. DocTypes和
  3. 的DocType
  4. 它还会创建DataRelation。此关系基于隐藏ColumnMapping的列,据我所知,此字段的命名约定为ParentTable FieldName_Id。如果要将数据保存回XML,则需要此字段。

    要在Gridview中隐藏此字段,我将设置AutoGenerateColumns =“false”并仅填充网格中需要的字段。如果要将其设置为true,则在GridView的RowDataBound事件中,您必须将此单元格的可见性设置为false:e.Row.Cells[2].Visible = false;

    现在您知道了表名,它们的字段名,您可以轻松地将它们绑定到GridView。将Gridview绑定到“Doc​​Type”表,如示例所示。

    回答第3次编辑,您不需要合并表格。您将重复行绑定到GridView,只需使用标签或文本框或复选框来显示非重复行,即DocumentView和ColumnarView。

    你可以像这样在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"/>
    

    希望它有所帮助!