如何找到用户控件内的中继器

时间:2018-07-27 15:19:31

标签: asp.net vb.net user-controls

我需要能够导出到优秀的直放站。那部分没问题。我有相应的代码。问题是我需要导出的转发器在用户控件内。我有一个页面可以加载多个报告,而每个报告都是不同的用户控件。

usercontrols本身嵌套在div标签中:

onError(AsyncEvent event)

所以我想找到的是用户控件中的转发器,这样我就可以渲染它以便导出到excel。

2 个答案:

答案 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);
    }
     }