在GridView中显示父/子xml节点

时间:2013-02-13 21:05:47

标签: .net xml gridview

我有格式

的XML表单
<DDCRData>
<role>
<name>CDH</name>
<adGroup>roles</adGroup>
<active>True</active>
<connectionNames>CDH0P</connectionNames>
<roleUsers>
  <user>
    <dbUserID>asuINBJvT4iGrrUgTcEKRPLzMzN6x6WBPtIjP+VYc6Y=</dbUserID>
    <dbUserPassword>x6JsTdhRcaNI+aFMeXfYkA==</dbUserPassword>
    <assignedTo />
    <checkOutTime />
  </user>
  <user>
    <dbUserID>AYufWjterIqgR4MA5wyO/L8AIVLcDQk1+HDvcqVCnrQ=</dbUserID>
    <dbUserPassword>GElP21V6jg7admUQW+hlZA==</dbUserPassword>
    <assignedTo />
    <checkOutTime />
  </user>

我正在寻找输出到gridview的角色名称,以及它下面的所有roleuser属性。每个角色有5个roleUser配置文件,每个配置文件都保存在节点中。我可以使用标准数据集绑定顶级信息:

        DataSet ds = new DataSet();
        ds.ReadXml(MapPath("~/utility/LogFile.xml"));
        GridView1.DataSource = ds;
        GridView1.DataBind();

但似乎找不到按照我喜欢的方式格式化表格的方法(包括用户信息)。

即。对于xml配置文件中的每个角色。 角色名称 -分配给 -CheckOutTime

感谢任何和所有信息!

1 个答案:

答案 0 :(得分:0)

我想我会用解决方案更新我的帖子。 我为xml文件创建了一个xsd模式,并编写了两个方法来填充DataTable,然后我将其用作GridView的数据源。

这是一些相关的代码:

userList = GetUsersFromRole(DDCRGroupName);
PopulateDataTable();


 public List<User> GetUsersFromRole(String DDCRGroupName)
    {
        List<User> usersBelongToRole = new List<User>();
        foreach (DDCRData.roleRow roleRow in config.role.Where(r => r.name == DDCRGroupName))
        {
            foreach (DDCRData.roleUsersRow roleuserrow in roleRow.GetroleUsersRows())
            {
                foreach (DDCRData.userRow userrow in roleuserrow.GetuserRows())
                {
                    User tempUser = new User();
                    tempUser.dbUserID = userrow.dbUserID;
                    tempUser.dbPassword = userrow.dbUserPassword;
                    tempUser.assignedTo = userrow.assignedTo;

                    usersBelongToRole.Add(tempUser);
                }
                return usersBelongToRole;
            }
        }
        return null;
    }

      private void PopulateDataTable()
    {
        //populate datatable with all user information
        foreach (User user in userList)
        {
            DataRow row = userDataTable.NewuserRow();
            row["dbUserID"] = new AESEncryption().Decrypt(user.dbUserID).ToUpper();
            row["dbUserPassword"] = new    AESEncryption().Decrypt(user.dbPassword).ToUpper();
            row["assignedTo"] = user.assignedTo;
            row["checkOutTime"] = user.checkOutTime;
            userDataTable.Rows.Add(row);
        }
    }

然后在aspx.cs页面中只是一个简单的:

if ((roles != null) && (roles.Count() != 0))
        {
            DDCRData.roleDataTable table = roles.GetTable();

            GridView1.DataSource = table;
            GridView1.DataBind();
        }

希望这会有所帮助!