2011-01-22 14 views
1

表示にlistviewとdatapagerを使用しています。私はlistviewの2つのレベルを使用しています。内側のリストビュー項目は6つのタイプになります。自分のデータソースを使用します。私は1ページあたり1つの内側リストビューアイテムを表示する必要があります。各ページは正しく表示されますが、ページ番号が正しく設定されていません。たとえば、2番目のページ(他も同様)がクリックされた場合、1番目のページ番号が無効の場合は2番目のページ番号は無効になりません。ここでは、コードは次のとおりです。リストビューとデータページャでページ番号が正しく有効化されない理由

<div style="margin: 10px;"> 
     <asp:ListView ID="rptExercise2" runat="server" 
      ItemPlaceholderID="itemPlaceHolder1" OnItemDataBound="ExerciseBound" OnPagePropertiesChanging="ChangeExercise"> 
      <LayoutTemplate>  
       <asp:PlaceHolder ID="itemPlaceHolder1" runat="server" /> 
      </LayoutTemplate> 

      <ItemTemplate> 
      <h2><asp:Label ID="lbName" runat="server" /></h2> 
      <asp:ListView ID="rptContent2" runat="server" ItemPlaceholderID="itemPlaceHolder2" OnItemDataBound="ContentBound"> 
       <LayoutTemplate>  
        <asp:PlaceHolder ID="itemPlaceHolder2" runat="server" /> 
       </LayoutTemplate> 

       <ItemTemplate> 
        <div style="padding: 5px;" >        
         <div> 
         <asp:Label ID="lbID" runat="server" Text='<%# Eval("ID") %>' Visible="false" /> 

         <asp:Label ID="lbWrapper" runat="server" Text='<%# Eval("Wrapper") %>' Visible="false" /> 

         <asp:Label ID="lbAudioQuestion" runat="server" Visible="false" /> 

         <div style="text-align: right;"><asp:Label ID="lbAudioAnswer" runat="server" Visible="false" /></div> 

         <div style="text-align: right;"><asp:TextBox ID="tbAnswer" runat="server" TextMode="MultiLine" CssClass="tb" Width="50%" Height="60" Visible="false" /></div> 

         <div style="margin-left: 20px;"><asp:RadioButtonList ID="rblChoice" runat="server" Visible="false" /></div>        
         </div>         
        </div> 
       </ItemTemplate> 
      </asp:ListView> 

      <asp:Panel ID="pnFeedback" runat="server" Visible="false" CssClass="Feedback"> 
       <div style="margin: 10px;"> 
        <div style="float: left;"> 
        Score: <br /><asp:TextBox ID="tbScore" runat="server" CssClass="tb" Width="40" />/<asp:Label ID="lbScore" runat="server" /></div> 
        </div> 
        <asp:Label ID="lbResultID" runat="server" Visible="false" /> 
        <div style="float: left;"> 
        Feedback<br /> 
        <asp:TextBox ID="tbFeedback" runat="server" TextMode="MultiLine" CssClass="tb" Width="200" Height="60" /> 
        </div> 

        <div style="float: left;"> 
        Recording<br /> 
        <asp:Label ID="lbFeedbackAudio" runat="server" /> 
        </div> 
        <br style="clear: both;" /> 
       </div> 
      </asp:Panel> 

      </ItemTemplate> 
      <EmptyItemTemplate> 
       <div> 
        Sorry, no exercise is found for this lesson. 
       </div> 
      </EmptyItemTemplate> 

     </asp:ListView> 


     <asp:DataPager ID="DataPager" runat="server" PagedControlID="rptExercise2" 
      PageSize="1"> 
      <Fields> 
       <asp:NextPreviousPagerField ButtonType="Button" ShowFirstPageButton="True" 
        ShowNextPageButton="False" ShowPreviousPageButton="False" /> 
       <asp:NumericPagerField ButtonCount="10" ButtonType="Button" /> 
       <asp:NextPreviousPagerField ButtonType="Button" ShowLastPageButton="True" 
        ShowNextPageButton="False" ShowPreviousPageButton="False" /> 
      </Fields> 
     </asp:DataPager> 

public partial class MyPracClass : System.Web.UI.Page 
{ 
    // Current page number 
    int i = 0; 

    protected classLessons les; 
    protected classExercises exc; 
    protected List<classExercises> exercises; 

    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (Request["LessonID"] == null) 
     { 
      return; 
     } 

     classLessons les = new classLessons(Convert.ToInt32(Request["LessonID"])); 
     exc = new classExercises(); 
     exercises = exc.GetExercisesByLessonID(les.ID); 

     if (!IsPostBack) 
     { 
      lbLessonName.Text = les.Name; 
      lbDescription.Text = les.Description; 
      //SetPageNumber(); 

      rptExercise2.DataSource = exercises; 
      rptExercise2.DataBind(); 
     } 
    } 

    protected void ExerciseBound(object sender, ListViewItemEventArgs e) 
    { 
     if (e.Item.ItemType == ListViewItemType.DataItem) 
     { 
      ListViewDataItem item = (ListViewDataItem)e.Item; 

      Label lbName = (Label)item.FindControl("lbName"); 
      string excName = "Exercise " + (i+1) + ": " + exercises[i].Subject; 
      lbName.Text = excName; 

      Label lbFeedbackAudio = (Label)item.FindControl("lbFeedbackAudio"); 
      classContent ct = new classContent(); 
      string test = "exercise" + exercises[i].ID + "student" + Session["StudentID"] + "feedback"; 
      lbFeedbackAudio.Text = ct.GetPlayingString("exercise" + exercises[i].ID + "student" + Session["StudentID"] + "feedback"); 

      ListView rptContent2 = (ListView)item.FindControl("rptContent2"); 
      Panel pnFeedback = (Panel)item.FindControl("pnFeedback"); 

      if (exercises[i] != null && rptContent2 != null) 
      { 
       classContent cct = new classContent(); 

       rptContent2.DataSource = cct.GetContentByExerciseID(exercises[i].ID); 
       rptContent2.DataBind(); 
      } 

      var result = new classResults(); 

      result.GetResultByExerciseID(Convert.ToInt32(exercises[i].ID)); 

      if (result.ID > 0) 
      { 
       pnFeedback.Visible = true; 
       Label lbID = (Label)item.FindControl("lbResultID"); 
       Label lbScore = (Label)item.FindControl("lbScore"); 
       lbScore.Text = exercises[i].Score.ToString(); 
       TextBox tbScore = (TextBox)item.FindControl("tbScore"); 
       TextBox tbFeedback = (TextBox)item.FindControl("tbFeedback"); 

       lbID.Text = result.ID.ToString(); 
       tbScore.Text = result.Score.ToString(); 
       tbFeedback.Text = result.Feedback; 
      } 
     } 
    } 

    protected void ChangeExercise(object sender, PagePropertiesChangingEventArgs e) 
    { 
     // Get current page number 
     i = e.StartRowIndex/e.MaximumRows; 

     rptExercise2.DataSource = exercises; 
     rptExercise2.DataBind(); 
    } 

    //protected void DataPager_PreRender(object sender, EventArgs e) 
    //{ 
    // // Get current page number 
    // //i = e.StartRowIndex/e.MaximumRows; 

    // rptExercise2.DataSource = exercises; 
    // rptExercise2.DataBind(); 
    //} 

    protected void ContentBound(object sender, ListViewItemEventArgs e) 
    { 
     if (e.Item.ItemType == ListViewItemType.DataItem) 
     { 
      ListViewDataItem dataItem = (ListViewDataItem)e.Item; 
      var qry = (classContent)dataItem.DataItem; 

      Label lbAudioQuestion = (Label)e.Item.FindControl("lbAudioQuestion"); 
      Label lbAudioAnswer = (Label)e.Item.FindControl("lbAudioAnswer"); 
      Label lbWrapper = (Label)e.Item.FindControl("lbWrapper"); 
      TextBox tbAnswer = (TextBox)e.Item.FindControl("tbAnswer"); 
      RadioButtonList rblChoice = (RadioButtonList)e.Item.FindControl("rblChoice"); 

      switch (qry.Type) 
      { 
       case classContent.ContentType.AudioQuestion: 
        lbAudioQuestion.Visible = true; 
        lbAudioQuestion.Text = qry.GetPlayingString(qry.Wrapper); 
        break; 
       case classContent.ContentType.TextQuestion: 
        lbWrapper.Visible = true; 
        break; 
       case classContent.ContentType.VideoQuestion: 
        lbWrapper.Visible = true; 
        break; 
       case classContent.ContentType.AudioAnswer: 
        lbAudioAnswer.Visible = true; 
        lbAudioAnswer.Text = qry.GetRecordingString("content" + qry.ID + "student" + Session["StudentID"]); 
        break; 
       case classContent.ContentType.TextAnswer: 
        tbAnswer.Visible = true; 
        break; 
       case classContent.ContentType.ChoiceAnswer: 
        rblChoice.DataSource = qry.GetChoiceOptions(qry.ID); 
        rblChoice.DataTextField = "Value"; 
        rblChoice.DataValueField = "IsAnswer"; 
        rblChoice.DataBind(); 
        rblChoice.Visible = true; 
        break; 
       default: break; ; 
      } 

      classAnswers ans = new classAnswers(); 

      var contentAnswer = ans.GetAnswerByContentID(qry.ID); 

      if (contentAnswer.ID > 0) 
      { 
       switch (qry.Type) 
       { 
        case classContent.ContentType.TextAnswer: 
         tbAnswer.Text = contentAnswer.Answer; 
         break; 
        case classContent.ContentType.ChoiceAnswer: 
         rblChoice.SelectedIndex = Convert.ToInt32(contentAnswer.Answer); 
         break; 
        default: break; ; 
       } 
      } 

     } 

    } 

答えて

1

この記事は、あなたがDataPagerコントロールhttp://www.4guysfromrolla.com/articles/011310-1.aspxを利用について必要な場合がありますすべてを伝えます(記事の最後のセクションを参照してください)

記事は明らかに個々のページ番号を変更する/適用について説明しますページング領域でしたがって、現在のページ番号のボタン/リンクを無効にし、残りのページ番号を有効にするCSSクラスを作成するだけで済みます。

希望します。

関連する問題