比如xml如下
<users> <user id="01">a</userid>
 <user id="02">b</userid>
 <user id="03">c</userid>
 <user id="04">d</userid>
</users>
sql表有如下字段
  id    name
  01    huang1
  02    huang2
  03    huang3
  04    huang4
我想在datagrid里绑定两列
   a  huang1
   b  huang2
   c  huang3
   d  huang4
各位高手请教怎样做?
以上只是1:1关系,如是1:n或m:n呢?

解决方案 »

  1.   

    可以把xml读到一个datatable,sql语句读到一个datatable
    然后关联2张表,生成rows集合作为datagrid的数据源
      

  2.   

    楼上的方法可行,
    另外也可以考虑把你的xml串传到存储过程里面去处理
    比较罗嗦一点
      

  3.   

    if your xml is complicated enough and you don't want to load it into the dataset, you can always write your own filtering fucntion, for exampleassume your xml is like this (since your xml is invalid):Testuser.xml:<users>
     <user id="01">a</user>
     <user id="02">b</user>
     <user id="03">c</user>
     <user id="04">d</user>
    </users>
    you can try<%@ Import Namespace="System.Xml"%>
    <%@ Import Namespace="System.Data"%>
    <script language="C#" runat="server">
    DataTable dt = null;DataTable GetData()
    {
      if (dt == null)
      {
       dt = new DataTable();
       dt.Columns.Add("id", typeof(string));
       dt.Columns.Add("name", typeof(string));
       
       string[] ids = {"01","02","03","04","01"};
       string[] names = {"huang1","huang2","huang3","huang4","huang5"};
     
       for (int i=0; i < ids.Length; i++)
       {
    DataRow dr = dt.NewRow();
    dr["id"] = ids[i];
    dr["name"] = names[i];
    dt.Rows.Add(dr);
       }
      }
       return dt;
    }void Page_Load(object sender, EventArgs e)
    {
      if (!IsPostBack)
      {
    string sFile = Server.MapPath("TestUser.xml");
    XmlDocument doc = new XmlDocument();
    doc.Load(sFile); DataGrid1.DataSource = doc.DocumentElement.ChildNodes;
    DataGrid1.DataBind();
      }
    }DataView GetSqlData(string id)
    {
      DataView dv = new DataView(GetData());
      dv.RowFilter = "id = '" + id + "'";
      return dv;
    }
    </script><form runat="server">
     <asp:DataGrid id="DataGrid1" runat="server" AutoGenerateColumns="false">
      <Columns>
    <asp:TemplateColumn HeaderText="a">
    <ItemTemplate>
    <%# ((XmlElement)Container.DataItem).InnerText%>
    </ItemTemplate>
    </asp:TemplateColumn> <asp:TemplateColumn HeaderText="name">
    <ItemTemplate>
    <asp:DataGrid id="DataGrid2" runat="server" AutoGenerateColumns="false"
    DataSource='<%# GetSqlData(((XmlElement)Container.DataItem).Attributes["id"].Value)%>'>
       <Columns>
    <asp:TemplateColumn>
    <ItemTemplate>
    <%# DataBinder.Eval(Container.DataItem, "name")%>
    </ItemTemplate>
    </asp:TemplateColumn>
       </Columns>
      </asp:DataGrid>
    </ItemTemplate>
    </asp:TemplateColumn>
      </Columns>
     </asp:DataGrid> <asp:Button runat="server" Text="Refresh" />
    </form>
      

  4.   

    你可以把xml读到一个datatable,sql语句的数据集放到另外一个datatable中,然后关联2张表,生成rows集合作为datagrid的数据源。不过推荐思归的方法。