2010-11-11 30 views
4

我在.aspx頁面上有一個listview控件。在這個列表視圖裏面我想檢查來自數據庫的「Type」屬性。這裏是示例代碼:如果在帶有Eval()或DataBinder.Eval()的ListView中的語句?

<ItemTemplate> 
     <%# if(Convert.ToInt32(DataBinder.Eval(Container.DataItem,"Type")) == 0){ %> 
      <tr class="item"> 
       <td> 
        <%# Convert.ToDateTime(Eval("WorkDate")).ToShortDateString() %> 
       </td> 
       <td style="text-align: center;"> 
        <%# Eval("SkillName") %> 
       </td> 
      </tr> 
     <%# } else if (Convert.ToInt32(DataBinder.Eval(Container.DataItem,"Type")) == 1) {%> 
      <tr class="item"> 
       <td colspan="2"> 
        <strong><%# Convert.ToDateTime(Eval("WorkDate")).ToShortDateString() %></strong> 
       </td> 
      </tr> 
      <% } %> 
    </ItemTemplate> 

作爲最後的手段,我試圖用戶的DataBinder.Eval(),但我得到的異常「預期類,委託,枚舉,接口或結構」。我能做什麼錯了?在代碼隱藏中編寫函數對我來說不是一種選擇。有沒有一種方法來實現這一目標?

+0

「編寫代碼隱藏的功能是不是我的選擇」 爲什麼呢?有一個ItemDataBound事件,你可以很容易地做到這一點:http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.listview.itemdatabound.aspx – 2010-11-11 17:09:49

+0

問題是與控制語句,它們在項目模板中是不可以的。 – Hogan 2010-11-11 17:14:49

回答

2

未經檢驗的,因爲我沒有Visual Studio中可用的那一刻,但由於HtmlTableRowVisible屬性,下面應該工作:

<tr class="item" runat="server" Visible='<%# Convert.ToInt32(Eval("Type")) == 0 %>'> 
    ... 
</tr> 
+0

很好的回答.... – ward87 2010-11-11 17:32:48

0

是你將不得不雖然做了一些客戶端腳本...我會建議jquery ..

你基本上會循環遍歷jQuery中的所有行,並根據行中的數據,你將能夠改變行對象的innerhtml基於「.item 「選擇器來確定它應該是一種格式還是另一種格式。

+1

不需要客戶端腳本 - 請參閱@Heinzi站立方式來做到這一點。 – Hogan 2010-11-11 17:13:50

+0

我對OP的問題的理解是,他有兩種不同的格式,他希望實施每一行。如果它是一種類型的格式應該是1種方式,如果它的另一種類型應該是另一種方式。我不確定隱藏基於類型的行是否會起作用,除非他將模板中的每個記錄從數據集中雙重顯示,並在每次迭代中將它們關閉並打開。 – Patrick 2010-11-11 17:16:16

+0

Heinzi的方式完全正確。這不需要客戶端腳本。 – ward87 2010-11-11 17:19:45

4

這是完整的代碼,花哨和簡短。

<ItemTemplate> 
     <tr class="item"> 
      <td colspan="<%# Eval(Container.DataItem,"Type")) == 0 ? 1:2%>"> 
       <strong><%# Convert.ToDateTime(Eval("WorkDate")).ToShortDateString() %></strong> 
      </td> 
      <td style="text-align: center;" visible="<%# Eval(Container.DataItem,"Type")) == 1>"> 
       <%# Eval("SkillName") %> 
      </td> 
     </tr> 
</ItemTemplate> 
+1

+1擴展Heinzi的探索。謝謝。 – Patrick 2010-11-11 17:20:13

+0

這個Eval的東西會在服務器端執行,對嗎? – NoSaidTheCompiler 2014-12-05 19:56:53

+1

@HakuKalay - 在.NET中的東西'<% %>'和'<%# %>'由腳本系統進行評估,而不是直接發送到瀏覽器。當'#'出現時,意味着寫出評估表達式的結果。當它不存在時,它由腳本語言執行(因此它可以包含分支和循環功能)。 – Hogan 2014-12-05 20:33:45