2013-07-24 3 views
1

У меня тонна проблем, и я следил за множеством примеров кода от людей с тем же вопросом. В основном у меня есть gridview, и у меня есть столбец с флажками, а другой с кнопкой link. Я хочу скрыть/отключить флажок в строке, если ссылка на ссылку в другом столбце не равна null (поле не пустое). Я пробовал все это сделать ... (lb! = Null), (lb.Text! = Null) Кроме того, я попытался найти элементы управления по столбцу номер ... нет удачиУсловно Скрыть флажок в строке Gridview

Что я делать не так? (GridView функции, как правило, кроме скрывающей функции флажка)

я пытался отладки и, казалось, что он не получал прошло первое если заявление (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> 
+0

Самая первая строка имеет тип: Заголовок, поэтому в первой итерации при отладке он не будет передавать ваш оператор IF, который фактически проверяет DataRow. Кроме того, я просто просмотрел ваш код и его работу для меня. Флажки были спрятаны. Скажите, что такое PO_ID? Это первичный ключ? Убедитесь, что PO_ID не равен null –

ответ

0

LinkButton.CommandArgument реализован таким образом (ILSpy на .NET 4):

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; 
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; 
       } 
     } 
    } 
-1

Вы не использовали Колонны и Asp: TemplateField для LinkButton Так использование что.

Смежные вопросы