日期:2014-05-18  浏览次数:20534 次

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 来控制按钮的可见性 。如果是的话,这样控制就可以了。
记着一定要绑定前给值。