Обновить метку ASP внутри ASP Datalist - PullRequest
0 голосов
/ 24 марта 2012

У меня есть ASP Datalist с вложенным GridView.Я пытаюсь отобразить метку ASP для каждого элемента списка, где вид сетки имеет более 6 строк, и скрыть его для тех элементов списка, где вид сетки имеет <6 строк. </p>

Вот список данных:

<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>

Метка, которую я пытаюсь обновить: lblShowResponses .

Метод заполнения списка данных:

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

И представление сетки заполняется какследует:

    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!!!!!!
       }

   }

Как я могу обновить / заполнить метку lblShowResponses , когда представление сетки содержит более 6 строк?

1 Ответ

0 голосов
/ 24 марта 2012

Не уверен, поможет ли это вам, передайте параметр DataListItemEventArgs "e" методу BindGrid и в место, где вы хотите заполнить метку и использовать

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