I am trying to write a custom DataSource control by inheriting System.Web.UI.WebControls.ObjectDataSource. Here is my code for my data source class.
public class MyDataSource : ObjectDataSource
{
public MyDataSource()
{
this.TypeName = GetType().FullName;
this.SelectMethod = "SelectAll";
this.SelectCountMethod = "SelectCount";
}
protected override void OnInit(System.EventArgs e)
{
base.OnInit(e);
}
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
}
[DataObjectMethod(DataObjectMethodType.Select)]
public DataTable SelectAll()
{
// Do something using this.DataObjectTypeName
DataTable dt = new DataTable();
// Fill DataTable
return dt;
}
public int SelectCount()
{
// Here is not important yet
return 20;
}
}
I use my data source as follows:
<asp:GridView ID="grd" runat="server" AutoGenerateColumns="true" Width="100%"
AllowPaging="true" AllowSorting="true" PageSize="10" DataSourceID="myDataSource">
</asp:GridView>
<cc2:MyDataSource ID="myDataSource" runat="server"
DataObjectTypeName="MyLib.MyClass, MyLib">
</cc2:MyDataSource>
No code is written in my aspx.cs file and my code works fine if I write a hardcoded select logic in SelectAll method. But when I tried to use DataObjectTypeName property in SelectAll method I saw that this property has an empty string value. I put four break points in my data source code. First in the constructer, second in OnInit, third in OnLoad and last in SelectAll methods. Here is the list of where code has stopped and values of DataObjectTypeName when I run the project.
1) @Constructer: DataObjectTypeName = "" 2) @OnInit : DataObjectTypeName = "MyLib.MyClass, MyLib" 3) @OnLoad : DataObjectTypeName = "MyLib.MyClass, MyLib" 4) @Constructer: DataObjectTypeName = "" 5) @SelectAll : DataObjectTypeName = ""
Q1: Why constructer is invoked twice?
Q2: Why DataObjectTypeName property is not assigned after second invocation of constructer?
Thanks in advance,
Mehmet.