2016-10-26 23 views
1

このGridviewの列10 templatefield:それはforeachループ内で参照されるのはここGridview TemplateFieldの行を参照するには?

<asp:TemplateField> 
<HeaderTemplate> 
<asp:Label runat="server">Active Licenses</asp:Label> 
</HeaderTemplate> 
<ItemTemplate> 
<asp:Label ID="lblActiveCodes" runat="server" Text='intValues'></asp:Label> 
</ItemTemplate> 
</asp:TemplateField> 

です。

foreach (GridViewRow row in gvCustomers.Rows) 
{ 
    if (row.Cells[10].Text.Equals(0)) 
    { 
     row.Visible = false; 
    } 
} 

だから、GridViewの列10であり、私は目に見えない値0を用いて細胞を作るために探しています。 intValuesintです。これはデータベースのものです。 gvCustomersは、私のGridViewIDです。

どうすればrow.Cells[10]が機能しませんが、もっと重要なことは、どのように動作させることができますか?

+0

このように 'Visible = 'プロパティを設定することができます。'%#GetVisible(Eval( "intValues").ToString())%>' 'そして、コードビハインドの' GetVisible'メソッドでゼロに等しい場合はfalseを返します。私が7時間前に答えたこの質問をチェックしてください:http://stackoverflow.com/questions/40263845/set-date-visible-condition-in-linkbutton –

答えて

1

二重引用符をゼロに追加します。テキストタイプは文字列です。

if ((row.Cells[10].FindControl("lblActiveCodes") as Label).Text.Equals("0")) 
0

多くの問題があります。

最初に、ラベルテキストに列をバインドするには、Evalを使用する必要があります。現在のテキストは、文字通り「intValues」の文字列です。したがって:

第2に、ラベルはサーバー側のコントロールです。セルには単純なテキストではなく、コントロールが含まれます。だからあなたはこのコントロールを探しているはずです。値は、それが今の文字列であるラベルテキストにバインドされると、

Label label = row.FindControl("lblActiveCodes") as Label; 

サード:ところで、あなたは、全体の行の列のインデックスをカウントするので、必要があることを行うことができます。列の値が文字列でない場合は、ToString呼び出しで変換されます。したがって:

if (label != null && label.Text != "0") 
{ 
    row.Visible = false; 
} 

最後に、このコードを実行しているときは言及していませんでした。常に機能するとは限りませんが、グリッドビューは既にデータバインドされている必要があります。そのようなものを実行するのに最適な時間は、RowDataBoundイベントです。この場合、行全体を反復処理する必要はなく、グリッドビューがデータバインドであり、すべてのコントロールが作成されることを100%保証します。

+0

はい、これは正しいと思います。それをテストします。 –

+0

@Java、ホールド、私はいくつかの詳細情報を編集中です – Andrei

関連する問題