c#
  • asp.net
  • gridview
  • 2015-03-31 2 views 0 likes 
    0

    Я хотел бы иметь условие в одном из столбцов Grid-view, который может содержать цифровую строку (6-10 цифр) или символы (3-6). Что-то вроде:Вложенное состояние IF в компоненте gridview

    <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 должен быть виден одновременно, как я могу его выполнить? Заранее спасибо.

    ответ

    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(); 
    

    Теперь, держать только 1 HyperLink контроль в вашем GridView и связать его с соответствующими свойствами.

    <asp:HyperLink ID="HL_String" runat="server" Text='<%# Eval("Code")%>' Target="_blank" 
           NavigateUrl='<%# Eval("NavigateUrl") %>'> 
    </asp:HyperLink> 
    
    Смежные вопросы