博客园  :: 首页  :: 联系 :: 管理

ObjectDataSource 小结 二

Posted on 2010-01-07 14:07  sunrack  阅读(332)  评论(0)    收藏  举报

一、自定义对象作为输入参数

注意,由于DataObjectDataSource 使用反射调用GUID函数,所以页面控件和Session等均不可以使用。

 

public class CustomParameter<T> : Parameter
   {
       T obj; //传?递?给?业?务?逻?辑?对?象?的?形?参?的?值?
       public T Value
       {
           get { return obj; }
           set { obj = value; }
       }
       public CustomParameter() { }
       //传?递?参?数?名?和?参?数?值?,?调?用?父?类?构?造?方?法?给?参?数?名?赋?值?,?并?把?参?数?值?保?存?到?obj里?。?
       public CustomParameter(string name, T value)
           : base(name)
       {
           obj = value;
       }
       public CustomParameter(string name, TypeCode type, T value)
           : base(name, type)
       {
           obj = value;
       }
       public CustomParameter(CustomParameter<T> original)
           : base(original)
       {
           obj = original.Value;
       }
       //被?DataSource控?件?绑?定?时?自?动?调?用?,?更?新?并?返?回?Parameter 对?象?的?值?。?
       protected override object Evaluate(HttpContext context, Control control)
       {
           return Value;
       }
   }

 

ObjectDataSource 对象

 

 

<asp:ObjectDataSource ID="ObjectDataSourceActivity" runat="server" DataObjectTypeName="Diebold.ProjectTracking.DBAccess.Activity"
    DeleteMethod="DeleteMethodHandler" InsertMethod="InsertMethodHandler" SelectMethod="SelectMethodHandler"
    TypeName="Diebold.ProjectTracking.Web.Controls.ActivityOutlookView" UpdateMethod="UpdateMethodHandler"
     OnInserted="ObjectDataSourceActivity_OnInserted">
</asp:ObjectDataSource>

 

 

在DataBind之前,设置好参数

 

          this.ObjectDataSourceActivity.SelectParameters.Clear();
          this.ObjectDataSourceActivity.SelectParameters.Add(new CustomParameter<List<int>>("ProjectIDList", this.ProjectIDList));
          this.ObjectDataSourceActivity.SelectParameters.Add(new CustomParameter<List<int>>("ActivityTypeIDList", this.ActivityTypeIDList));
 

 

定义查询函数

public IEnumerable SelectMethodHandler(List<int> projectIDList, List<int> activityTypeIDList)
{
    ActivityList curActivityList = new ActivityList();
 
    this.CurActivityList = this.CurDBManager.Activity.Select(projectIDList, activityTypeIDList);
 
    foreach (Activity activity in this.CurActivityList)
    {
        activity.ActivityTypeReference.Load();
        activity.ProjectReference.Load();
        activity.ProjectStatusReference.Load();
        activity.UserInfoReference.Load();
 
        activity.LoadData();
 
        curActivityList.Add(activity);
    }
 
    return curActivityList;
}

 

二、ObjectDataSource 输出参数

经过试验,使用页面所在的类的成员函数,以及Session等均不行,最后,使用页面所在类的静态成员成功!