我需要能够导出到优秀的直放站。那部分没问题。我有相应的代码。问题是我需要导出的转发器在用户控件内。我有一个页面可以加载多个报告,而每个报告都是不同的用户控件。
usercontrols本身嵌套在div标签中:
onError(AsyncEvent event)
所以我想找到的是用户控件中的转发器,这样我就可以渲染它以便导出到excel。
答案 0 :(得分:0)
您可以使用UserControl上的FindControl来找到转发器。
Repeater repeater = UCReport1.FindControl("Repeater1") as Repeater;
现在,您可以使用repeater
来访问所有Repeater属性。
int items = repeater.Items.Count;
答案 1 :(得分:0)
我认为这取决于您何时获取数据。您可以在转发器的DataBind()上执行此操作,并在填充数据时立即获取所需的数据。或者,如果以后需要,我想您可以在控件本身中创建一个动作事件,然后将其传递回转发器。
//in your User control class that holds the repeater..
public static event Action<Repeater> GetRepeater;
private Repeater repeater1;
//populate and display repeater omited...
private void onGetRepeater(Repeater repeater)
{
GetRepeater?.invoke(repeater);
}
//just fire from somewhere. you
//could use the dataBind() page_Load, button click or whatever.
//depending on when you need it.
protected void someBtnInYourControl_Click(object sender, EventArgs eArgs)
{
onGetRepeater(this.repeater1);
}
现在您可以在项目中其他任何地方进行订阅。
public class OtherController : Controller
{
public ActionResult Index()
{
//subscribe to the event
UCReport1.GetRepeater += UCReport1_GetRepeater;
return View();
}
private void UCReport1_GetRepeater(System.Web.UI.WebControls.Repeater foo)
{
//when your event is trigger on the UC it will pass the repeater back so you
can use however.
exportRepeaterToReport(foo);
}
}