gridview组件中的嵌入式IF语句

时间:2015-03-31 11:25:28

标签: c# asp.net gridview

我想在我的一个Grid-view列中有一个条件,它可能包含一个数字字符串(6-10位)或字符(3-6)。类似的东西:

<asp:HyperLink ID="HL_Number" runat="server" Text='<%# Eval("Code")%>' Target="_blank"
NavigateUrl='<%# "http://www.address.com/" +  Eval("Code")%>'> Visible='<%  (IsNumber(Eval("Code"))==true)? true:false  %>'
</asp:HyperLink>

<br />

<asp:HyperLink ID="HL_String" runat="server" Text='<%# Eval("Code")%>' Target="_blank"
NavigateUrl='<%# "~/PDF/" +  Eval("Code")+"pdf" %>'   Visible='<%  (IsNumber(Eval("Code"))==false)? true:false  %>'>
</asp:HyperLink>

其中一个HyperLink必须同时可见,我该如何执行?在此先感谢。

1 个答案:

答案 0 :(得分:0)

从良好的设计角度来看,将此逻辑移至您的业务层。让我们说这是你的实体

public class MyEntity
{
   public int Id {get;set;}
   // ... some other properties
   public string Code {get;set;}

   // if you need some other control to be visible based on 
   // whether Code is a number or not, use this to bind to Visible property. 
   // Note, this is not required in case of HyperLink
   public bool IsVisible
   {
     { get {return IsNumber(Code); }
   }
   public string NavigateUrl
   { 
      get { return GetUrl(Code); }
   }
   private bool IsNumber(string code) { // your method body here }
   private string GetUrl(string code)
   {
       if(!IsNumber(code))
       {
          return string.Format("~/PDF/{0}pdf", code);
       }

       return string.Format("http://www.address.com/{0}",code);
   }
}

假设您的数据源是MyEntity对象的集合。

    var dataSource = // some method that returns collection of MyEntity objects, 
                     // for example List<MyEntity>
    myGridView.DataSource = dataSource;
    myGridView.DataBind();

现在,在GridView中只保留1个HyperLink控件并将其绑定到相应的属性。

<asp:HyperLink ID="HL_String" runat="server" Text='<%# Eval("Code")%>' Target="_blank"
               NavigateUrl='<%# Eval("NavigateUrl") %>'>
</asp:HyperLink>