Friday, June 27, 2014

Bind XML Node Value To GridView column in ASP.NET using XPath

Given in a datasource object where in you have a column which contains an XML string and you want to bind a certain node value instead of the entire XML string to GridView column, here's a solution using XPath. ASPX:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
<asp:GridView ID="gvPersons" runat="server" AutoGenerateColumns="False" BackColor="White"   
       Width="400px" BorderColor="#E7E7FF" BorderStyle="None" BorderWidth="1px" CellPadding="3">  
       <AlternatingRowStyle BackColor="#F7F7F7" />  
       <Columns>  
         <asp:BoundField DataField="ID" HeaderText="ID" >  
         <ItemStyle Width="50px" />  
         </asp:BoundField>  
         <asp:BoundField DataField="XMLData" HeaderText="Name" >  
         <ItemStyle Width="350px" />  
         </asp:BoundField>  
       </Columns>  
       <FooterStyle BackColor="#B5C7DE" ForeColor="#4A3C8C" />  
       <HeaderStyle BackColor="#4A3C8C" Font-Bold="True" ForeColor="#F7F7F7" />  
       <PagerStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" HorizontalAlign="Right" />  
       <RowStyle BackColor="#E7E7FF" ForeColor="#4A3C8C" />  
       <SelectedRowStyle BackColor="#738A9C" Font-Bold="True" ForeColor="#F7F7F7" />  
       <SortedAscendingCellStyle BackColor="#F4F4FD" />  
       <SortedAscendingHeaderStyle BackColor="#5A4C9D" />  
       <SortedDescendingCellStyle BackColor="#D8D8F0" />  
       <SortedDescendingHeaderStyle BackColor="#3E3277" />  
     </asp:GridView>  

C# Code:
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
protected void BindToGridXPath()
        {
            XmlDocument xmlDoc;
            XmlNode xmlNode;
            String xpathExpr;

            DataTable dt = new DataTable();
            dt.Columns.AddRange(new DataColumn[]
                {
                    new DataColumn("ID",typeof(int)), 
                    new DataColumn("XMLData", typeof(string))
                });

            DataRow row = dt.NewRow();
            row["ID"] = 1;
            row["XMLData"] = "<Person><Name>James Minervo</Name><Age>33</Age></Person>";

            DataRow row1 = dt.NewRow();
            row1["ID"] = 2;
            row1["XMLData"] = "<Person><Name>Mike Phill</Name><Age>45</Age></Person>";

            //...codes to manipulate the datatable
            xmlDoc = new XmlDocument();
            xmlDoc.LoadXml(row["XMLData"].ToString());
            xpathExpr = "/Person/Name";
            xmlNode = xmlDoc.SelectSingleNode(xpathExpr);
            row["XMLData"] = xmlNode.InnerText;

            xmlDoc = new XmlDocument();
            xmlDoc.LoadXml(row1["XMLData"].ToString());
            xpathExpr = "/Person/Name";
            xmlNode = xmlDoc.SelectSingleNode(xpathExpr);
            row1["XMLData"] = xmlNode.InnerText;

            dt.Rows.Add(row);
            dt.Rows.Add(row1);

            gvPersons.DataSource = dt;
            gvPersons.DataBind();
        }

Output:

0 comments:

Post a Comment