一、自定义对象作为输入参数
注意,由于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等均不行,最后,使用页面所在类的静态成员成功!
浙公网安备 33010602011771号