2010-05-19 29 views
2

我在GridView(組件ASP.NET)的每一行中都有一個刪除按鈕。我想要一些刪除按鈕不可見。刪除按鈕的可見性應取決於行後面的數據。將表達式的綁定按鈕可見性(C#)

GridViewEntityDataSource支持。 GridView顯示實體,稱爲Category,每行有一個實例。實體Category(除了其他)還有一個EntityCollection類型的字段。該字段的名稱是Items。基本上我想讓用戶刪除一行只有當Items支持Category實體是一個空集合。

我不能彌補Visible屬性的結合。我沒有使用綁定的經驗,Google也沒有真正的幫助。 這是按鈕的外觀現在:

<asp:Button ID="DeleteButton" runat="server" CommandName="Delete" 
        Text="Delete" 
        Visible=??? ></asp:Button> 

我不知道用什麼來替代???。按鈕schold可見,只有當該表達式評估爲真:

((SimpleEShop.Model.Category) dataItem).Items.LongCount() <= 0 

其中dataItem變量包含在表中當前行的數據。 我需要什麼綁定?

回答

3

egrunin錯過了一些東西嘗試一下這樣的

Visible='<%# !(((System.Data.Objects.DataClasses.EntityCollection<YourItemType>)Eval("Items")).Count <= 0)%>' 
+0

這看起來很有前途 - 它會拋出錯誤說,在類實體集合中沒有屬性「LongCount」,但這是我的錯......我會修復它(找到正確的屬性),然後再試一次。 – drasto 2010-05-19 23:24:01

+0

我修改了我的答案,我想你只需要替換「YourItemType」並且應該可以工作 – alejandrobog 2010-05-19 23:38:59

+0

表達式中還有兩個問題,但最後我有這個:Visible ='<%#(int)Eval(「Items.Count」 )<= 0? true:false%>'。現在問題是無論「Items」中有多少個元素,它的計算結果都爲true。我如何發現問題在哪裏?我不能在這個代碼中使用調試器來斷點... – drasto 2010-05-19 23:39:37

3

通常我把這個數據綁定處理程序,但如何對這樣的事情:

Visible="<%# Eval("Items.LongCount") <= 0 ? "false" : "true";%>" 

引號中之報價可能會導致錯誤,這是一個原因,我會把它在的ItemDataBound處理程序。

+0

將如何使用的ItemDataBound處理你解決了嗎? – drasto 2010-05-19 23:33:05

+0

表達式中有一些問題,但最後我有這樣的:Visible ='<%#(int)Eval(「Items.Count」)<= 0? true:false%>'。現在問題是無論「Items」中有多少個元素,它的計算結果都爲true。我如何發現問題在哪裏?我不能使用調試器在此代碼中的斷點... – drasto 2010-05-19 23:40:19

+1

我只是使用 Visible ='<%#Eval(「Items.Count」)<= 0 %>' – 2010-05-20 02:00:26

2

添加到egrunin的語法,我只想用

Visible='<%# Eval("Items.Count") <= 0 %>'