我有一些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()
我检查所有类型(TextBox
,Button
等),然后我禁用它们。最常见的例外是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
本身不会被禁用?
Enabled
- 状态是否可能覆盖“Child”-Controls-Enabled-Status?!
答案 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的功能丢失。