listView DataPager和自定义userControl

时间:2014-07-03 11:09:12

标签: c# asp.net user-controls

我有一个25问题的测试,所以我为Question创建了一个用户控件,我创建了一个包含列表视图的页面,其中只包含用户控件的问题

这是usercontrol问题的cs

public partial class ucScoringQuestion : System.Web.UI.UserControl
{
    public int CheckedIndex { get { return rbAnswers.SelectedIndex; } }
    public ScoringQuestion scoringQuestion { get; set; }
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            if (scoringQuestion != null)
            {
                foreach (string item in scoringQuestion.GetAnswersAsList())
                {
                    rbAnswers.Items.Add(new ListItem(item));
                }
                lblQuestion.Text = scoringQuestion.GetQuestionText();
            }
        }
    }
}

这是页面的asp

    <div style="margin: 0 auto; width: 900px;">
    <asp:ListView ID="lvQuestions" runat="server" OnItemDataBound="lvQuestions_ItemDataBound">
        <ItemTemplate>
            <uc1:ucScoringQuestion runat="server" ID="ucScoringQuestion" />
        </ItemTemplate>
    </asp:ListView>
    <asp:DataPager ID="DataPager1" runat="server" PagedControlID="lvQuestions" PageSize="5" OnDataBinding="DataPager1_DataBinding" ViewStateMode="Enabled" OnPreRender="DataPager1_PreRender" OnInit="DataPager1_Init" OnLoad="DataPager1_Load">
        <Fields>
            <asp:NextPreviousPagerField ShowNextPageButton="true" ShowPreviousPageButton="false" ShowFirstPageButton="false" ButtonType="Link" FirstPageText='Next' />
        </Fields>
    </asp:DataPager>
</div>

这是页面的c#

       private int QuestionNumber = 0;
    protected void Page_Load(object sender, EventArgs e)
    {
        //if (!IsPostBack)
        //{
        //    RuwadEntitiesConnection ctx = new RuwadEntitiesConnection();
        //    lvQuestions.DataSource = ctx.ScoringQuestions.Where(x => x.QuestionStageID == 2).ToList();
        //    lvQuestions.DataBind();
        //}
    }
    protected void lvQuestions_ItemDataBound(object sender, ListViewItemEventArgs e)
    {
        if (e.Item.ItemType == ListViewItemType.DataItem || e.Item.ItemType == ListViewItemType.InsertItem)
        {
            ucScoringQuestion ucQuestion = (ucScoringQuestion)e.Item.FindControl("ucScoringQuestion");
            ucQuestion.scoringQuestion = (ScoringQuestion)e.Item.DataItem;
            string pre = MyContext.CurrentLanguage == Languages.Arabic ? "<strong>س. </strong>" : "<strong>Q. </strong>";
            ucQuestion.spnQuestionNumber.InnerHtml = pre + (++QuestionNumber).ToString() + " ";
        }
    }
    protected void DataPager1_PreRender(object sender, EventArgs e)
    {
        RuwadEntitiesConnection ctx = new RuwadEntitiesConnection();
        lvQuestions.DataSource = ctx.ScoringQuestions.Where(x => x.QuestionStageID == 2).ToList();
        lvQuestions.DataBind();
    }

我通常会在datapager prerender方法中绑定数据,如果我没有使用用户控件它可以正常工作,但如果我使用usercontrol则不会出现问题。 我跟踪问题我发现在调用lvQuestions_ItemDataBound方法之前,usercontrol是初始化的 我如何能够解决这个问题,如果我想继续使用用户控件

1 个答案:

答案 0 :(得分:2)

使用listview DataPager1_PreRender中的数据绑定,可以使数据查询到数据库最小化。 至于你的问题我可以看到你可以改变用户控制的问题tb就像这样

  public int CheckedIndex { get { return rbAnswers.SelectedIndex; } }
    public ScoringQuestion scoringQuestion { get; set; }
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
            Reinitialize();
    }
    public void Reinitialize()
    {
        if (scoringQuestion != null)
        {
            foreach (string item in scoringQuestion.GetAnswersAsList())
            {
                rbAnswers.Items.Add(new ListItem(item));
            }
            lblQuestion.Text = scoringQuestion.GetQuestionText();
        }
    }

并在lvQuestions_ItemDataBound方法中调用Reinitialize(),如下所示

 protected void lvQuestions_ItemDataBound(object sender, ListViewItemEventArgs e)
{
    if (e.Item.ItemType == ListViewItemType.DataItem || e.Item.ItemType == ListViewItemType.InsertItem)
    {
        ucScoringQuestion ucQuestion = (ucScoringQuestion)e.Item.FindControl("ucScoringQuestion");
        ucQuestion.scoringQuestion = (ScoringQuestion)e.Item.DataItem;
        string pre = MyContext.CurrentLanguage == Languages.Arabic ? "<strong>س. </strong>" : "<strong>Q. </strong>";
        ucQuestion.spnQuestionNumber.InnerHtml = pre + (++QuestionNumber).ToString() + " ";
        ucQuestion.Reinitialize();
    }
}

这个inshallah会工作

相关问题