无法在Grid单元格中找到控件

时间:2015-05-13 05:02:04

标签: c# telerik-grid

我正在使用Hierarchical Telerik Grid View。我想隐藏展开/隐藏按钮如果问题属于某种类型。我试图在Grid_ItemDatatbound上实现这一点。

                  <CW:GridView ID="rGVEvaluationQuestions" runat="server" Width="99%" OnItemDataBound="rGVEvaluationQuestions_ItemDataBound"
                        OnDetailTableDataBind="rGVEvaluationQuestions_DetailTableDataBind" OnNeedDataSource="rGVEvaluationQuestions_NeedDataSource"

                        AllowPaging="false" ShowHeader="false" GridLines="Both">
                        <MasterTableView DataKeyNames="ID" AllowMultiColumnSorting="True">
                            <DetailTables>
                                <Telerik:GridTableView DataKeyNames="ID" Name="LabelQuestion" Width="100%" Height="100px">
                                    <Columns>
                                        <Telerik:GridTemplateColumn HeaderText="<%$Resources:LanguageResource, Edit%>" ItemStyle-Width="50px"
                                            DataField="ID">
                                            <ItemTemplate>
                                                <asp:HiddenField ID="hdnEvalID" runat="server" />
                                                <asp:HiddenField ID="hdnEvaluationQuestionID" runat="server" />
                                                <asp:HiddenField ID="hdnEvaluationQuestionTypeID" runat="server" />
                                                <asp:Label ID="lblQuestionNumber" runat="server"></asp:Label>
                                            </ItemTemplate>
                                        </Telerik:GridTemplateColumn>
                               <Telerik:GridTemplateColumn ItemStyle-HorizontalAlign="Left">
                                    <ItemTemplate>
                                        <asp:Label ID="lblQuestion" runat="server"></asp:Label><br />
                                        <br />
                                       Display="Dynamic"></asp:CustomValidator></td>
                                    </ItemTemplate>
                                </Telerik:GridTemplateColumn>
                                        //Some Hidden fields and textboxex here
                                    </Columns>
                                </Telerik:GridTableView>
                            </DetailTables>
                            <Columns>
                                <Telerik:GridTemplateColumn HeaderText="<%$Resources:LanguageResource, Edit%>" ItemStyle-Width="50px"
                                    DataField="ID">
                                    <ItemTemplate>
                                        <asp:HiddenField ID="hdnEvalID" runat="server" />
                                        <asp:HiddenField ID="hdnEvaluationQuestionID" runat="server" />
                                        <asp:HiddenField ID="hdnEvaluationQuestionTypeID" runat="server" />
                                        <asp:Label ID="lblQuestionNumber" runat="server"></asp:Label>
                                    </ItemTemplate>
                                </Telerik:GridTemplateColumn>
                                <Telerik:GridTemplateColumn ItemStyle-HorizontalAlign="Left">
                                    <ItemTemplate>
                                        <asp:Label ID="lblQuestion" runat="server"></asp:Label><br />
                                        <br />
                                       //Some Hidden fields and textboxex here
                                            Display="Dynamic"></asp:CustomValidator></td>
                                    </ItemTemplate>
                                </Telerik:GridTemplateColumn>
                            </Columns>
                        </MasterTableView>
                    </CW:GridView>

在这背后的代码就是我正在做的事情。

if (evalQuestionType == Coursewhere.BLL.Enums.EvaluationQuestionType.Label)
{
    if (item.Cells.Count > 0)
    {
        item.Cells[0].Text = " ";
        item.Cells[0].Enabled = true;

    }

}
else
{
    item.Cells[0].Text = " ";

    if (item.Cells[0].Controls.Count>0)
    {  
        item.Cells[0].Controls[0].Visible = false;
    }
    item.Cells[0].Enabled = false;
    item.Cells[0].Style.Add("background", "#8ea3b9 none");
}

item.cell [0]是一个有<input type Button>的td。但是我无法在后面的代码中找到它。 一旦发现我想设置它的风格。 我究竟做错了什么? 请不要找到作为td的item.control [0]。但无法完成内部的控制。这是因为它没有运行@server?

修改 我在page_prerender上找到了以下代码。 这使得展开/隐藏按钮对所有行都不可见。 但我希望这只发生在特定的行上。

  protected void rGVEvaluationQuestions_PreRender(object sender, EventArgs e)
        {
            HideExpandColumnRecursive(rGVEvaluationQuestions.MasterTableView);
        }
        public void HideExpandColumnRecursive(GridTableView tableView)
        {
            GridItem[] nestedViewItems = tableView.GetItems(GridItemType.NestedView);
            foreach (GridNestedViewItem nestedViewItem in nestedViewItems)
            {
                foreach (GridTableView nestedView in nestedViewItem.NestedTableViews)
                {
                    if (nestedView.Items.Count == 0)
                    {
                        TableCell cell = nestedView.ParentItem["ExpandColumn"];
                        cell.Controls[0].Visible = false;
                        cell.Text = " ";
                        nestedViewItem.Visible = false;
                    }
                    if (nestedView.HasDetailTables)
                    {
                        TableCell cell = nestedView.ParentItem["ExpandColumn"];
                        if (cell.Controls.Count > 0)
                        {
                            cell.Controls[0].Visible = true;
                            cell.Text = " ";
                            nestedViewItem.Visible = true;
                        }
                    }
                }
            }
        }

有人可以帮我在数据绑定功能上使用此功能的功能,以便我可以禁用/隐藏相应的Row的展开按钮吗?

1 个答案:

答案 0 :(得分:0)

我不知道为什么这不起作用。

   if (item.Cells[0].Controls.Count>0)
    {  
        item.Cells[0].Controls[0].Visible = false;
    }    

最后这很有用。

TableCell tccell = item.Cells[0];
               if (evalQuestionType == Coursewhere.BLL.Enums.EvaluationQuestionType.Label)
                    {
                        tccell.Controls[0].Visible = true;

                    }
                    else
                    {
                        tccell.Controls[0].Visible = false;

                    }