我正在使用嵌套转发器构建一个表,原因我不在这里讨论,但我要做的是有两个数据源,一个用于顶级转发器,对应于行,一个用于第二级将在一行内返回单元格的转发器.
然而,我想知道的是,如果我能以某种方式在嵌套转发器的数据源中指定一个参数,该数据源是在第一个数据源的结果中设置了一个字段吗?
我可以将参数设置为数据绑定表达式的值吗?
我想这样做的原因是我有两个存储过程.当页面加载时我有一个会话参数我可以用来运行第一个存储过程,但是,对于第二个存储过程,我需要将顶级转发器的每个实例的值与对第二个存储过程的调用相关联具有不同的参数值.
解决方法
我认为最好的方法是处理外部中继器的ItemDataBound事件,查找内部DataSource控件并为其设置SelectParameter.
void MyOuterRepeater_ItemDataBound(Object sender,RepeaterItemEventArgs e) { // Find the Inner DataSource control in this Row. sqlDataSource s = (sqlDataSource)e.Item.FindControl("InnerDataSource"); // Set the SelectParameter for this DataSource control // by re-evaluating the field that is to be passed. s.SelectParameters["MyParam"].DefaultValue = DataBinder.Eval(e.Item.DataItem,"MyFieldValueToPass").ToString(); }
有关使用DataList的示例,请查看ASP.NET快速入门here
P.S.:请参阅下面Tony的回复,对上面提到的片段进行重要修正.值得注意的是,检查当前RepeaterItem的ItemType是很重要的.或者,始终检查每个对象上的空值是一种很好的做法.