I have a simple page where I am dynamically generating columns on the page load event and seting datasource during the need data source event. The initial load works correctly, but after any postback the columns still exist but the header text and datafield properties are empty.
Below is the simpliest example I can make. Any thoughts on why the columns are losing their information?
<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">
public class DataClass
{
private string _a = "";
private string _b = "";
public string A { get { return this._a; } }
public string B { get { return this._b; } }
}
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
System.Reflection.PropertyInfo[] fields = typeof(DataClass).GetProperties();
foreach (System.Reflection.PropertyInfo field in fields)
{
GridBoundColumn c = new GridBoundColumn();
c.DataField = field.Name;
c.HeaderText = field.Name;
this.RadGrid1.MasterTableView.Columns.Add(c);
}
}
}
protected void RadGrid1_NeedDataSource(object source, Telerik.Web.UI.GridNeedDataSourceEventArgs e)
{
System.Collections.Generic.List<DataClass> results = new System.Collections.Generic.List<DataClass>();
this.RadGrid1.DataSource = results;
}
protected void Button1_Click(object sender, EventArgs e)
{
// Column exist but header text and data field properties are ""
}
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title>Test Page</title>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server" />
<asp:Button ID="Button1" runat="server" Text="Force Postback" onclick="Button1_Click" />
<telerik:RadGrid ID="RadGrid1" runat="server" onneeddatasource="RadGrid1_NeedDataSource" AutoGenerateColumns="false" />
</form>
</body>
</html>