visible的问题
摸板列中的删除按钮绑定布尔属性 CanDelete 时,CanDelete 为 True时,页面装载时不能显示,查询后就能显示了,怎么回事。
代码如下:
HTML:
<asp:GridView ...
...
<ItemTemplate>
<asp:LinkButton ID="lkDelete" runat="server" CausesValidation="False" CommandName="Delete"
Text="删除" OnClientClick="return confirm('确认要删除吗?');"
Visible="<%# CanDelete %>">
</asp:LinkButton>
</ItemTemplate>
...
</asp:GridView>
C#:
...
private bool _CanDelete;
public bool CanDelete
{
set { _CanDelete = value; }
get { return _CanDelete; } //_CanDelete
}
...
//初始化过程
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack) //初始化
{
...
bind(); //绑定数据
}
...
CanDelete = true;
...
}
//点击查询
protected void btnQry_Click(object sender, EventArgs e)
{
bind();
}
------解决方案--------------------你设置属性的做法错误了,因为你现在的CanDelete属性在任何postback之后都会状态消失,你不绑定gv的话stateview不会变化,重新绑定就会有变化了。
你要保证你的状态持久化,最简单的办法就是控件记录状态;
------解决方案--------------------
这里有问题。如果想第一次出现 应该在绑定之前给CanDelete 复制为true;否则你第一次绑定的时候_CanDelete 没给值。还有一个问题就是。CanDelete 定义一个变量。每次页面会送服务端的时候。这个值都被初始化。这个值最好保存一下。
代码如下:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack) //初始化
{
bind(); //绑定数据 ///给值必须在绑定列表之前。否则列表已经生成了。已经抛出html了
}
}
private bool _CanDelete = true;
public bool CanDelete
{
get
{
object o = this.ViewState["CanDelete "];//记录很重要,以免被其他事件冲掉。
if(o == null)
true;
return (string)o;
}
set
{
this.ViewState["CanDelete "] = value;
}
}
//点击查询
protected void btnQry_Click(object sender, EventArgs e)
{
//CanDelete = false 不知道楼主是否想要 CanDelete 来控制按钮的可见性。
bind();
}
不知道楼主是否想要 CanDelete 来控制按钮的可见性 。如果是的话,这样控制就可以了。
记着一定要绑定前给值。