1

我遇到了很多麻烦,并且我已经从有相同问题的人那里遵循了大量示例代码。基本上我有一个gridview,我有一个带有复选框的列和另一个带有链接按钮的列。如果另一列中的数据绑定链接按钮不为空(字段不为空),我想隐藏/禁用一行中的复选框。我已经尝试了各种方法...(lb!=null), (lb.Text!=null) 另外,我尝试按列号查找控件...不走运

我究竟做错了什么?(gridview 功能通常不同于复选框隐藏功能)

我尝试调试,似乎没有通过第一个 if 语句(rowtype==...)

。CS:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
  if (e.Row.RowType == DataControlRowType.DataRow)
  {
    LinkButton lb = e.Row.FindControl("LinkButtonPO") as LinkButton;

    if (lb.CommandArgument != null)
    {
      CheckBox cb = e.Row.FindControl("CbPO") as CheckBox;

      if (cb != null)
        cb.Visible = false;

     }
   }
 }

.aspx

 <asp:GridView ID="GridView1" 
     CssClass="Gridview" runat="server" 
     AllowSorting="True"
     AutoGenerateColumns="False" 
     DataKeyNames="Order_ID"
     DataSourceID="OrderHistoryData"  
     HorizontalAlign="Center" 
     EmptyDataText="No Data to Display" 
     Width="785px"
     AlternatingRowStyle-CssClass="alt" AllowPaging="True"
     PagerStyle-CssClass="pager" GridLines="None" PageSize="20"
     ShowHeaderWhenEmpty="True" OnRowDataBound="GridView1_RowDataBound">
              <ItemTemplate>
                 <asp:LinkButton ID="LinkButtonPO" runat="server" CommandArgument='<%# Bind("PO_ID") %>' OnClick="LinkButtonPO_Click" Text='<%# Bind("PO_Lit") %>'></asp:LinkButton>
             </ItemTemplate>
             <asp:TemplateField >
             <ItemTemplate>
                <asp:CheckBox ID="CbPO" runat="server"  OnCheckedChanged="CbPO_CheckedChanged" Visible="true" />
             </ItemTemplate>
         </asp:TemplateField>
4

3 回答 3

0

我正在这样使用并为我工作

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            LinkButton lb = e.Row.FindControl("LinkButtonPO") as LinkButton;
            CheckBox cb = e.Row.FindControl("CbPO") as CheckBox;
            if (cb != null)
                {
                    cb.Visible = false;
                }
        }
    }
于 2013-07-25T04:34:12.097 回答
0

LinkButton.CommandArgument以这种方式实现(.NET 4 上的 ILSpy):

public string CommandArgument
{
    get
    {
        string text = (string)this.ViewState["CommandArgument"];
        if (text != null)
        {
            return text;
        }
        return string.Empty;
    }
    set
    {
        this.ViewState["CommandArgument"] = value;
    }
}

因此,在 ASP.NET 中,该属性通常null不是String.Empty.

所以改变

if (lb.CommandArgument != null)
    cb.Visible = false;

cb.Visible = lb.CommandArgument.Length > 0;
于 2013-07-24T15:26:53.107 回答
-1

您没有使用 Columns 和 Asp:TemplateField 作为 Linkbutton 所以使用它。

于 2013-07-30T06:33:29.450 回答