【问题标题】:Bind button visibility to the expression (C#)将按钮可见性绑定到表达式 (C#)
【发布时间】:2010-05-19 22:53:24
【问题描述】:

GridView(组件 ASP.NET)的每一行都有一个删除按钮。我希望某些删除按钮不可见。删除按钮的可见性应该取决于行后面的数据。

GridViewEntityDataSource 支持。 GridView 显示名为 Category 的实体,每行一个实例。实体Category(除其他外)还有一个EntityCollection 类型的字段。该字段的名称是Items。基本上,我希望仅当支持 Category 实体的 Items 字段为空集合时才允许用户删除一行。

我无法弥补Visible 属性的绑定。我没有绑定经验,谷歌也没有真正的帮助。 这是按钮现在的样子:

<asp:Button ID="DeleteButton" runat="server" CommandName="Delete" 
                    Text="Delete" 
                    Visible=??? ></asp:Button>

我不知道应该用什么替换 ???。仅当此表达式的计算结果为 true 时,按钮 schold 才可见:

((SimpleEShop.Model.Category) dataItem).Items.LongCount() <= 0

其中dataItem 变量包含表中当前行的数据。 我需要什么绑定?

【问题讨论】:

    标签: c# asp.net data-binding gridview templates


    【解决方案1】:

    egrunin 错过了一些东西试试这样

    Visible='<%# !(((System.Data.Objects.DataClasses.EntityCollection<YourItemType>)Eval("Items")).Count <= 0 )%>'
    

    【讨论】:

    • 这看起来很有希望 - 它会抛出错误,指出类实体集合中没有属性“LongCount”,但这是我的错......我会修复它(找到正确的属性)然后再试一次。
    • 我修改了我的答案,我认为你想要的只是替换“YourItemType”,这应该可以工作
    • 表达式中还有两个问题,但最后我有这个: Visible='' 。现在的问题是,无论“项目”中有多少元素,这都会评估为 true。我如何找到问题所在?我不能在这段代码中使用调试器断点...
    • 不幸的是与上一个案例相似。由于某种原因,表达式总是计算为 false,因此删除按钮总是不可见的。我找不到原因,因为我不知道如何调试。
    • 但是是的,正如我所看到的那样 Visible='' 和你的表达应该做我想做的,但他们只是不......
    【解决方案2】:

    通常我会把它放在 DataBound 处理程序中,但是这样的东西怎么样:

    Visible="<%# Eval("Items.LongCount") <= 0 ? "false" : "true";%>"
    

    引号内的引号可能会导致错误,这是我将其放入 ItemDataBound 处理程序的原因之一。

    【讨论】:

    • 表达式有一些问题,但最后我有这个: Visible='' 。现在的问题是,无论“项目”中有多少元素,这都会评估为 true。我如何找到问题所在?我不能在这段代码中使用调试器断点...
    • 我只会使用 Visible=''
    • 感谢所有为此提供帮助的人。我尽量不要在没有先测试的情况下发布,但今天没有时间:)
    【解决方案3】:

    添加到 egrunin 的语法,我会使用

    Visible='<%# Eval("Items.Count") <= 0 %>'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-30
      • 2011-12-05
      • 1970-01-01
      • 2012-09-06
      • 1970-01-01
      • 2018-04-21
      相关资源
      最近更新 更多