2012-03-24 15 views
0

Ich habe einen ASP Datalist mit einem verschachtelten GridView. Ich versuche, ein ASP-Label für jedes Listenelement anzuzeigen, wo die Gridview mehr als 6 Zeilen hat, und es für die Listenelemente versteckt, wo die Gridview < 6 Zeilen hat. HierASP-Etikett in ASP Datalist aktualisieren

ist die Datenliste:

<asp:DataList runat="server" id="listResponses" DataKeyField="QuestionID" OnItemDataBound="listResponses_ItemDataBound" Width="100%"> 
       <ItemTemplate> 
        <div class="question_header"> 
         <p><strong><asp:Label ID="lblOrder" runat="server" Text='<%# Container.ItemIndex + 1 %>'></asp:Label>. <%# DataBinder.Eval(Container.DataItem, "QuestionText") %></strong></p> 
        </div> <!-- end question_header --> 
        <asp:GridView runat="server" ID="gridResponses" DataKeyNames="AnswerID" AutoGenerateColumns="False" CssClass="responses" AlternatingRowStyle-BackColor="#f3f4f8"> 
         <Columns> 
          <asp:BoundField DataField="AnswerTitle" HeaderText="Answer Title" HeaderStyle-ForeColor="#717171" ItemStyle-Width="250px"></asp:BoundField> 
          <asp:BoundField DataField="Responses" HeaderText="Response Count" HeaderStyle-ForeColor="#717171" HeaderStyle-Width="100px" /> 
          <asp:TemplateField> 
           <ItemTemplate> 
            <div class="pbcontainer"> 
             <div class="progressbar"></div> 
             <asp:HiddenField ID="hiddenValue" runat="server" Value='<%# Eval("Responses") %>' /> 
            </div> 
           </ItemTemplate> 
          </asp:TemplateField> 
         </Columns> 
        </asp:GridView> 
        <a><asp:Label runat="server" ID="lblShowResponses" Visible="false"></asp:Label></a> 
       </ItemTemplate> 
      </asp:DataList> 

Das Label I zu aktualisieren versuchen ist lblShowResponses.

Die Methode der Datenliste zu füllen:

// populate datalist. 
DT = GetData.GetQuestionNameDataList(qid); 
listResponses.DataSource = DT; 
listResponses.DataBind(); 

Und die gridview bevölkert ist wie folgt:

protected void listResponses_ItemDataBound(object sender, DataListItemEventArgs e) 
    { 
     GridView gridResponses = (GridView)e.Item.FindControl("gridResponses"); 
     BindGrid(gridResponses, (int)listResponses.DataKeys[e.Item.ItemIndex], DT.Rows[e.Item.ItemIndex][2].ToString()); 
    } 

    // Get the question ID from the datalist and parse the parameters to BindGrid 
    protected void listResponses_ItemDataBound(object sender, DataListItemEventArgs e) 
    { 
     GridView gridResponses = (GridView)e.Item.FindControl("gridResponses"); 
     BindGrid(gridResponses, (int)listResponses.DataKeys[e.Item.ItemIndex], DT.Rows[e.Item.ItemIndex][2].ToString()); 
    } 

    private void BindGrid(GridView GridView, int questionId, string questionType) 
    { 
     // get the answerID and title for the current question. 
     DataTable answersDataTable = new DataTable(); 
     answersDataTable = GetData.GetAnswerResponses(questionId); 
     DataTable tempResponses = new DataTable(); 

     // checkbox question type - loop through each answer and obtain the number of responses.  
     for (int answer = 0; answer < answersDataTable.Rows.Count; answer++) 
     { 
      // populate tempaory datatable and replace DT with the response count. 
      string answerID = answersDataTable.Rows[answer][0].ToString(); 
      tempResponses = GetData.getIndividualQuestionResponses(questionId, answerID); 
      answersDataTable.Rows[answer][2] = tempResponses.Rows[0][0]; 
     } 
     if (GridView.Rows.Count > 6) 
     { 
      for (int x = 6; x < GridView.Rows.Count; x++) 
      { 
       GridView.Rows[x].Visible = false; 
      } 

      // I want to populate the label here!!!!!! 
     } 

    } 

Wie kann ich das Label lblShowResponses aktualisieren/füllen, wenn die gridview mehr enthält als 6 Reihen?

Antwort

0

nicht sicher, ob diese Ihnen helfen würde, die DataListItemEventArgs param „e“ an die BindGrid Methode und in die gewünschte Position das Etikett und verwenden zum Auffüllen passieren

(e.Item.FindControl("lblShowResponses") as Label).Text = "Test"; 
(e.Item.FindControl("lblShowResponses") as Label).Visible = true;