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:
Comments
Post a Comment