摸板列中的删除按钮绑定布尔属性 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();
}
另外Visible只有在PoskBack的时候才能生效,此外采用Visible来控制状态隐藏显示,个人感觉在绑定控件中使用不好。
如果楼主仅仅用于简单的控制状态。还是才用纯Js控制要比较简单多。谢谢,个人观点
你要保证你的状态持久化,最简单的办法就是控件记录状态;
if (!IsPostBack) //初始化
{
...
bind(); //绑定数据
}
...
反过来写看看
{
if (!IsPostBack) //初始化
{
...
bind(); //绑定数据
}
//每次页面加载都会设置CanDelete为true,可能放到if(!IsPostBack)里能满足你的需求
CanDelete = true;
}
这里有问题。如果想第一次出现 应该在绑定之前给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 来控制按钮的可见性 。如果是的话,这样控制就可以了。
记着一定要绑定前给值。
第一次绑定bind 的时候 调用Visible的时候CanDelete 这个返回的不是true 。
接着给了值CanDelete =true 但这时候列表已经绑定完毕。按钮是不可见的。
现在看点击查询:因为点击查询每次都要走Page_Load 。楼主代码在 if (!IsPostBack) 外面给了
CanDelete =true 完了再走查询按钮里面写的方法也是bind 。
这次跟第一次不一样,是先给了true在进行列表绑定。正好Visible取值的时候是true。
所以就出来了。