2016-10-10 14 views
1

私のasp.netアプリケーションにgridviewがあります。 (何かを)例えば行に空のセルが含まれている場合、gridviewのボタンフィールドを表示および非表示にする方法

SN名日付アクション

1マイクボタン

は、これはほんの一私のGridViewの行のうちです。空のセルを持つ行ごとに、行のボタンフィールドセルが表示されます。その行に空のセルがない場合、ボタンは非表示にする必要があります。私のコードでは、表示されているすべてのボタンが偽になり、欲しくないということです。ここで

は、このコードを試す

<asp:GridView ID="GridView1" runat="server" AllowPaging="True" Height="326px" OnPageIndexChanging="GridView1_PageIndexChanging" PageSize="5" style="text-align: left; margin-left: 169px" Width="1069px" OnSelectedIndexChanged="GridView1_SelectedIndexChanged" OnRowDataBound="GridView1_RowDataBound" AutoGenerateColumns="False" OnRowCommand="GridView1_RowCommand" OnRowEditing="GridView1_RowEditing">      
<Columns> 
    <asp:BoundField HeaderText="S/N" DataField="SN" /> 
    <asp:BoundField HeaderText="First Name" DataField="FirstName" /> 
    <asp:BoundField HeaderText="Address" DataField="Address" /> 
    <asp:BoundField HeaderText="Phone Number" DataField="PhoneNumber" /> 
    <asp:BoundField HeaderText="Sex" DataField="Sex" /> 
    <asp:BoundField HeaderText="Reason" DataField="Reason" /> 
    <asp:BoundField HeaderText="SignIn" DataField="SignIn_Time" /> 
    <asp:BoundField HeaderText="SignOut" DataField="Signout_Time" /> 

<asp:TemplateField HeaderText="Action" Visible="True"> 
    <ItemTemplate> 
     <asp:Button ID="out" runat="server" Text="Sign out" CommandName="SignOut" CommandArgument='<%# Eval("SN") %>' CssClass="active"/> 
    </ItemTemplate> 
</asp:TemplateField> 

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
    for (int i =0 ; i < e.Row.Cells.Count; i ++) 
    { 
     if (e.Row.Cells[i].Text == "&nbsp;") 
     { 
     Button status = (Button)e.Row.FindControl("out"); 
     status.Visible = true; 
     } 
     else 
     { 
     Button status = (Button)e.Row.FindControl("out"); 
     status.Visible = false; 
     } 
    } 
    } 
} 
+0

おそらく 'e.Row.Cells [i] .Text =="   "'は決して真実ではありませんか?これをデバッグすると、空のセルの実際のテキスト値はどうなりますか?それは空ではないでしょうか? – David

答えて

1

背後に私のコードです

string.IsNullOrEmpty(e.Row.Cells[i].Text) 

または

e.Row.Cells[i].Text.Equals("&nbsp;") 
0

あなたがやっていることは、グリッド全体の中のすべてのセルをチェックすることです。解決策は、各RowDataBoundイベント内のすべてのセルをチェックすることです。あなたが意図的にデータベースに格納しない限り、

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e) 
{ 
    if (e.Row.RowType == DataControlRowType.DataRow) 
    { 
     var status = (Button) e.Row.FindControl("out"); 
     // Show button if at least one cell is empty. 
     status.Visible = e.Row.Cells.Cast<TableCell>() 
      .Any(cell => string.IsNullOrEmpty(cell.Text)); 
    } 
} 

通常、データベースは、空のデータ用&nbsp;を返すべきではありません。

関連する問題