当 GridView 为空时隐藏面板

Hide a Panel when GridView is empty

我在面板内有一个 GridView,我想在子项为空时隐藏它,因为目前仍然是一个带有 legend 文本的 fieldset,里面什么也没有。

我已经尝试在 Page_Load 事件中添加类似 Panel.Visible = GridView.Rows.Count > 0 的内容,但效果不佳。

如何获得我需要的结果?

谢谢

更多细节:

如果第一次加载数据库 table 是空的,我没有看到 fieldset,当我添加一行时,带有 GridView 的面板不会出现;如果在第一次加载时我有一行,我可以看到带有 GridView 的面板,当我删除唯一行时,任何东西都会消失,但即使我插入新行也永远不会回来。我认为 Page_Load 不是正确的事件。

如果您只想让您的面板 visible/invisible 基于 Gridview 行,那么就这么简单:

if(GridView.Rows.Count > 0)
    PanelId.Visible = true;
else
    PanelId.Visible = false;

但请确保在调用 Gridview 绑定函数后执行此代码。

希望对您有所帮助。

试试这个..

Panel.Visible = (GridView.Rows.Count > 0?false:true);

请尝试以下步骤:

  1. 在延迟页面事件中检查 Panel.Visible = GridView.Rows.Count > 0,例如 Page_PreRender
  2. 在 GridView 中添加 OnRowDeleted 事件并检查 Panel.Visible = GridView.Rows.Count > 0 删除的行是否是最后一行。同时将 GridView 重新绑定为 GridView.DataBind()
  3. 在 GridView 中添加 OnRowCreated 事件并重复与删除行相同的过程。

代码:

protected void Page_PreRender(object sender, EventArgs e)
{
    Panel.Visible = GridView.Rows.Count > 0;
}

protected void GridView_RowCreated(object sender, GridViewRowEventArgs e)
{
    GridView.DataBind();
    Panel.Visible = GridView.Rows.Count > 0;

}
protected void GridView_RowDeleted(object sender, GridViewDeletedEventArgs e)
{
    GridView.DataBind();
    Panel.Visible = GridView.Rows.Count > 0;
}

希望这能解决您的问题。

最后我发现了我的问题... 我已经将用于插入的 FormView 和 GridView 放在不同的 UpdatePanel 中,因此将所有内容统一在同一个 UpdatePanel 中并使用此代码:

Panel.Visible = GridView.Rows.Count > 0;

在 GridView DataBound 事件中,它起作用了。

谢谢大家