Я пытаюсь написать пользовательский элемент управления DataSource, унаследовав System.Web.UI.WebControls.ObjectDataSource. Вот мой код для моего класса источника данных.
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;
}
}
Я использую свой источник данных следующим образом:
<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>
В моем файле aspx.cs не написан код, и мой код работает нормально, если я пишу жестко запрограммированную логику выбора в методе SelectAll. Но когда я попытался использовать свойство DataObjectTypeName в методе SelectAll, я увидел, что это свойство имеет пустое строковое значение. Я поставил четыре точки останова в своем исходном коде данных. Первый в конструкторе, второй в OnInit, третий в OnLoad и последний в методах SelectAll. Вот список того, где код остановился, и значения DataObjectTypeName, когда я запускаю проект.
1) @Constructer: DataObjectTypeName = ""
2) @OnInit : DataObjectTypeName = "MyLib.MyClass, MyLib"
3) @OnLoad : DataObjectTypeName = "MyLib.MyClass, MyLib"
4) @Constructer: DataObjectTypeName = ""
5) @SelectAll : DataObjectTypeName = ""
В1: Почему конструктор вызывается дважды?
Вопрос 2. Почему свойство DataObjectTypeName не назначается после второго вызова конструктора?
Заранее спасибо,
Мехмет.