引言
Parameter 基类代表一个通用参数。Microsoft Visual Studio 2005 提供了诸如 QueryStringParameter 之类的参数,以便将数据从查询字符串参数请求到数据源中。另一个非常有用的参数是 ControlParameter,该参数允许从任一控件属性中请求数据。如果内置参数类型不能满足您的要求,则您可以定义自己的参数类型。这样您就可以使页面与粘接代码不相关,而是将该代码整齐地封装在参数实现中。
除了从不同的源中请求值,这些参数还可以跟踪值的更改情况,并通知这些更改的所属数据源,进而引发数据源更改通知,最终在数据绑定控件中触发数据绑定操作。简而言之,这就是使用 ControlParameters 时,主要的声明性详细方案所依据的原理。
示例
在此将向 WeatherDataSource 添加参数功能,然后进一步阐述。
public class WeatherDataSource : DataSourceControl {
public static readonly string ZipCodeParameterName = "ZipCode";
...
private ParameterCollection _parameters;
private ParameterCollection Parameters {
get {
if (_parameters == null) {
_parameters = new ParameterCollection();
_parameters.ParametersChanged += new EventHandler(this.OnParametersChanged);
if (IsTrackingViewState) {
((IStateManager)_parameters).TrackViewState();
}
}
return _parameters;
}
}
...
public string GetSelectedZipCode() {
if (_parameters != null) {
Parameter zipCodeParameter = _parameters[ZipCodeParameterName];
if (zipCodeParameter != null) {
IOrderedDictionary parameterValues = _parameters.GetValues(Context, this);
return (string)parameterValues[zipCodeParameter.Name];
}
}
return ZipCode;
}
protected override void LoadViewState(object state) {
object baseState = null;
if (state != null) {
Pair p = (Pair)state;
baseState = p.First;
if (p.Second != null) {
((IStateManager)Parameters).LoadViewState(p.Second);
}
}
base.LoadViewState(baseState);
}
protected override void OnInit(EventArgs e) {
Page.LoadComplete += new EventHandler(this.OnPageLoadComplete);
}
private void OnPageLoadComplete(object sender, EventArgs e) {
if (_parameters != null) {
_parameters.UpdateValues(Context, this);
}
}
private void OnParametersChanged(object sender, EventArgs e) {
CurrentConditionsView.RaiseChangedEvent();
}
protected override object SaveViewState() {
object baseState = base.SaveViewState();
object parameterState = null;
if (_parameters != null) {
parameterState = ((IStateManager)_parameters).SaveViewState();
}
if ((baseState != null) || (parameterState != null)) {
return new Pair(baseState, parameterState);
}
return null;
}
protected override void TrackViewState() {
base.TrackViewState();
if (_parameters != null) {
((IStateManager)_parameters).TrackViewState();
}
}
}
【中国下载站】【设为主页】【收藏本页】【打印本文】【回到顶部】【关闭此页】