Как найти управление шаблоном gridview внутри gridview? - PullRequest
0 голосов
/ 15 февраля 2012

У меня проблема с получением контроля над моей второй сеткой ("StaffAppraisalGrid"). Он показывает ноль всякий раз, когда я запускаю код GridView staffGrid = (GridView) SubmitAppraisalGrid.FindControl ("StaffAppraisalGrid"); , В чем может быть проблема?

дизайн:

 <asp:GridView ID="SubmitAppraisalGrid" runat="server" AutoGenerateColumns="False" ShowHeader="False" BorderWidth="0px">
    <Columns>
        <asp:TemplateField>
            <ItemTemplate>
                <asp:Label ID="QuestionLbl" runat="server" Text='<%# Bind("Question")%>'></asp:Label>
                <asp:GridView ID="StaffAppraisalGrid" runat="server" AutoGenerateColumns="False">
                    <Columns>
                        <asp:BoundField DataField="StaffName"/>
                        <asp:TemplateField>
                            <ItemTemplate>
                                <asp:RadioButtonList ID="RadioList" runat="server" DataSource='<%# Bind("RadioButtonList")%>'>
                                </asp:RadioButtonList>
                            </ItemTemplate>
                        </asp:TemplateField>
                        <asp:TemplateField>
                            <ItemTemplate>
                                <asp:TextBox ID="RemarksTbx" runat="server" Text='<%# Bind("RemarkTbx")%>'></asp:TextBox>
                            </ItemTemplate>
                        </asp:TemplateField>
                    </Columns>
                </asp:GridView>
            </ItemTemplate>
        </asp:TemplateField>
    </Columns>
</asp:GridView>

пример кода:

                ArrayList listofquestion= dbmanager.GetAllQuestion();

            ArrayList listofstaff = dbmanager.GetAllStaffName();
            DataTable dt = new DataTable();
            DataRow dr = null;
            dt.Columns.Add(new DataColumn("Question", typeof(string)));

            foreach (Question ques in listofquestion)
            {
                dr = dt.NewRow();
                dr["Question"] = "Q"+ques.QuestionID + ") " + ques.QuestionDetails+"?";
                dt.Rows.Add(dr);
            }

            ViewState["QuestionTable"] = dt;

            //staffgrid
            int index = 0;
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                DataTable staffdt = new DataTable();
                DataRow staffdr = null;
                staffdt.Columns.Add(new DataColumn("StaffName", typeof(string)));
                staffdt.Columns.Add(new DataColumn("RadioButtonList", typeof(ArrayList)));
                staffdt.Columns.Add(new DataColumn("RemarkTbx", typeof(string)));
                ArrayList listofradio = new ArrayList();
                listofradio.Add("1");
                listofradio.Add("2");
                listofradio.Add("3");
                listofradio.Add("4");
                listofradio.Add("5");
                listofradio.Add("6");
                listofradio.Add("7");
                listofradio.Add("N/A");

                foreach (string staffname in listofstaff)
                {
                    staffdr = staffdt.NewRow();
                    staffdr["StaffName"] = staffname;
                    staffdr["RadioButtonList"] = listofradio;
                    staffdr["RemarkTbx"] = string.Empty;
                    staffdt.Rows.Add(staffdr);
                }
                GridView staffGrid = (GridView)SubmitAppraisalGrid.FindControl("StaffAppraisalGrid");
                ViewState["QuestionTable"] = staffdt;
                staffGrid.DataSource = staffdt;
                staffGrid.DataBind();
                index++;
            }
            //before bind
            SubmitAppraisalGrid.DataSource = dt;
            SubmitAppraisalGrid.DataBind();

Ответы [ 2 ]

0 голосов
/ 15 февраля 2012

Попробуйте этот код

 protected void GVmaster_RowDataBound(object sender, GridViewRowEventArgs e)
{


if (e.Row.RowType == DataControlRowType.DataRow)
{
    GridView gvc = (GridView)e.Row.FindControl("gvChild");
}

}
0 голосов
/ 15 февраля 2012

Попробуйте, потому что дочерний gridview находится под одной ячейкой родительского GridView.Поэтому при доступе это должно быть .. ParentGridView.Row [rowIdx] .FindControl

// индекс строки

GridView staffGrid = (GridView)SubmitAppraisalGrid.Row[0].FindControl("StaffAppraisalGrid");
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...