如何从GridViewRow转换WebControl

时间:2014-09-12 14:03:14

标签: c# asp.net

我有一些GridView,其中列数量有所变化。只是最后一列始终相同,但它们的名称不同。

<asp:GridView>
    <%-- columns are here--%>
    <asp:TemplateField>
        <ItemTemplate>
            <asp:LinkButton>
            </asp:LinkButton>
        </ItemTemplate>
    </asp:TemplateField>
</asp:GridView>

现在我循环访问我的页面以禁用特定状态的所有控件:

public static void disableControls(ContentPlaceHolder cph)
{

    foreach (Control c in cph.Controls)
    {
        disableControl(c);
        foreach (Control c2 in c.Controls)
        {
    //and so on, this goes until 20 controls deep
        }
    }
}

在我的disableControl()我检查所有类型(TextBoxButton等),然后我禁用它们。最常见的例外是GridView。因为如果我禁用它们,它们就不再可滚动了。所以我试着保持GridView的启用,只是循环遍历行,并尝试将每个单元格转换为LinkButton以禁用它。因为不知何故,他们不会通过我的正常循环禁用所有控件及其子控件。但这也行不通,因为它们永远不会被铸造。我到现在为止尝试了什么(并没有奏效):

尝试1:

foreach (GridViewRow gvr in gv.Rows)
{
    if (gvr.RowType == DataControlRowType.DataRow)
    {
        for (int i = 0; i < gv.Columns.Count; i++)
        {
            try
            {
                System.Web.UI.WebControls.LinkButton lb = (System.Web.UI.WebControls.LinkButton)gvr.Cells[i].Controls[0];
                lb.Enabled = false;
             }
             catch(Exception)
             {}              
        }
    }
}

尝试2:

foreach (GridViewRow gvr in gv.Rows)
{
    foreach (TableCell cell in gvr.Cells)
    {
        foreach (Control con in cell.Controls)
        {
            try
            {
                System.Web.UI.WebControls.LinkButton lb = (System.Web.UI.WebControls.LinkButton)con;
                lb.Enabled = false;
            }
            catch (Exception)
            { }
        }
    }
}

如何确保LinkButton中的GridView被禁用,但GridView本身不会被禁用?

Btw:写完所有这些长篇文章之后我想到了什么:“Parent”-Controls(GridViews)Enabled - 状态是否可能覆盖“Child”-Controls-Enabled-Status?!

2 个答案:

答案 0 :(得分:2)

问题是你的检查假设它是一个链接按钮,但你输入首先检查控件:

if (lb is System.Web.UI.WebControls.LinkButton)
{
    ((System.Web.UI.WebControls.LinkButton)con).Enabled = false
}

您还可以在WebControl上键入check,并禁用所有Web控件。

答案 1 :(得分:0)

我绕过它,手动禁用所有控件(循环遍历面板 - 子项及其子项等,递归)面板

如果你手动将所有WebControl设置为禁用,那么&#34;可滚动&#34; -function就不会丢失,如果你只将Panel设置为disabled,它会被继承,并且&#34;可滚动& #34; GridView的功能丢失。