2010-08-26 104 views
2

我正在處理以下標記,在ASP.NET Webforms的DataBound控件中。操縱數據綁定控件中的數據綁定值? ASP.NET Webforms

<asp:TemplateField HeaderText="DomainID"> 
    <ItemTemplate> 
     <% for (int i = 0; i < 10; i++) 
      {%> 
      <%#Eval("DomainID"); %> 
      <% ++i; 
      } %> 
     </ItemTemplate> 
</asp:TemplateField> 

是否可以實際編寫內部代碼塊<%#Eval("DomainID"); %>部分如:

<%# var x = Eval("DomainID"); if ((int)x)>0){//print this} %> 

回答

2

當它開始變得這樣複雜,我總是建議您更改結構,使用服務器端控件,然後執行通過該控件的OnDataBinding事件進行綁定。

例子:

<asp:TemplateField HeaderText="DomainID"> 
    <ItemTemplate> 
     <asp:Literal ID="ltDomainID" runat="server" 
      OnDataBinding="ltDomainID_DataBinding" /> 
    </ItemTemplate> 

然後在你的codebind實現OnDataBinding

protected void ltDomainID_DataBinding(object sender, System.EventArgs e) 
{ 
    Literal lt = (Literal)(sender); 
    for (int i = 0; i < 10; i++) 
    { 
     var x = (int)(Eval("DomainID")); 
     if (x > 0) 
     { 
      lt.Text += x.ToString(); 
     } 
     ++i; 
    } 
} 

我可能有你的邏輯有點亂了,但是這應該給你的基本理念。實現邏輯服務器端可以讓你更清潔,並將邏輯直接連接到輸出控件(在本例中爲Literal)。

+0

我認爲你或多或少有我的邏輯固定。我不想在我的代碼背後寫一些如此簡單的東西,但看起來我可能不得不這樣做。 – maxp 2010-08-26 16:35:27

+1

@maxp我通常使用webforms以這種方式實現我所有的數據綁定,因爲它使aspx中的所有''代碼都不存在,並且它使移動和調整aspx變得非常簡單。我還在我的所有數據綁定代碼周圍添加了一個'#region'標記,以便它們全部結合在一起,並且下一個人可以輕鬆找到它,而無需尋找它。 – Kelsey 2010-08-26 16:48:55