摸板列中的删除按钮绑定布尔属性 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(); 
}

解决方案 »

  1.   

    Visible=" <%# CanDelete %>"> 改成Visible=" <%= CanDelete %>">   试试
      

  2.   

    楼主的那样应该是没错的,换成=符号意味着整个绑定控件的Visible都一个样。那不符合。
    另外Visible只有在PoskBack的时候才能生效,此外采用Visible来控制状态隐藏显示,个人感觉在绑定控件中使用不好。
    如果楼主仅仅用于简单的控制状态。还是才用纯Js控制要比较简单多。谢谢,个人观点
      

  3.   

    你设置属性的做法错误了,因为你现在的CanDelete属性在任何postback之后都会状态消失,你不绑定gv的话stateview不会变化,重新绑定就会有变化了。
    你要保证你的状态持久化,最简单的办法就是控件记录状态;
      

  4.   

    CanDelete = true; 
          
    if (!IsPostBack)  //初始化 

    ... 
    bind(); //绑定数据 

    ... 
            
    反过来写看看
      

  5.   

    protected void Page_Load(object sender, EventArgs e) 

          if (!IsPostBack)  //初始化 
            { 
              ... 
                bind(); //绑定数据 
            } 
          //每次页面加载都会设置CanDelete为true,可能放到if(!IsPostBack)里能满足你的需求
          CanDelete = true; 
      

  6.   


    这里有问题。如果想第一次出现 应该在绑定之前给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 来控制按钮的可见性 。如果是的话,这样控制就可以了。
    记着一定要绑定前给值。
      

  7.   

    帮楼主分析一下问题原因。
    第一次绑定bind 的时候 调用Visible的时候CanDelete  这个返回的不是true 。
    接着给了值CanDelete  =true 但这时候列表已经绑定完毕。按钮是不可见的。
    现在看点击查询:因为点击查询每次都要走Page_Load 。楼主代码在 if (!IsPostBack) 外面给了
    CanDelete  =true  完了再走查询按钮里面写的方法也是bind 。
    这次跟第一次不一样,是先给了true在进行列表绑定。正好Visible取值的时候是true。
    所以就出来了。
      

  8.   

    搞定。需要在gvMain_RowDataBound中处理。gvMain_RowDataBound过程优先于PAGELOAD。
      

  9.   

    搞定。需要在gvMain_RowDataBound中处理。gvMain_RowDataBound过程优先于PAGELOAD。