gridview绑定List<类>时,当类的属性为接口时,无法绑定数据.//JobSeeker 类
//JobSeeker 类含有一个类型为IMobile 的属性.
 public class JobSeeker 
    {        public int JobSeekerID
        {
            get;
            set;        }        public IMobile Mobile
        {
            get;
            set;
        }
}
//IMobile接口
public interface IMobile
    {
        string Number { get; set; }
        bool IsValid();
    }=======================List<JobSeeker> jobSeekerList = new List<JobSeeker>();
jobSeekerList = jobSeekerFactory.GetJobSeekerList();//此方法获得一些JobSeeker 对象集合.gvMobileList.DataSource = jobSeekerList;
gvMobileList.DataBind();
结果页面显示只有JobSeekerID 字段,而Mobile字段则显示为"命名空间.Mobile",无法显示具体在Number值.经调试,手机号码是有值的.期待高人点拨!!!!

解决方案 »

  1.   

    命名空间.Mobile.Number 是具体的值!!,你在显示的时候把Number点出来
      

  2.   

    public interface IMobile//接口的方法要去实现啊!在实现接口的类中实现啊
      

  3.   


    这个我已经实现了。在Mobile类中。
     public class Mobile : IMobile
        {
            public static ISqlCommand iSqlCommand;
            public string Number
            {
                get;
                set;        }        public bool IsValid()
            {
                string MobilePattern="1[358]\\d{9}";            return Regex.IsMatch(Number, MobilePattern);
              
            }
    }
      

  4.   


    点出来之后,就会报错:“在选定的数据源上未找到名为“Mobile.Number”的字段或属性。”另外,我按照你的说法,把 JobSeeker 类的接口属性改成类属性了,即 
    public Mobile Mobile
            {
                get;
                set;
            }依然无法显示mobile的number值内容。(断点监视时,这里面都是有值的!)
      

  5.   

    可以在后台转换:// 前台对应的字段名字是JobSeekerID, Number, IsValid
    var list = jobSeekerList.Select(a => new { a.JobSeekerID, Number = a.Mobile.Number, IsValid = a.Mobile.IsValid() });
    gvMobileList.DataSource = list;
    gvMobileList.DataBind();或者,也可以在前台改用模板绑定<asp:GridView ID="gvMobileList" Runat="server"  AutoGenerateColumns="false">
    <Columns>
    <asp:BoundField DataField="JobSeekerID" />
    <asp:TemplateField>
    <ItemTemplate><%#Eval("Mobile.Number") %></ItemTemplate></asp:TemplateField>
    <asp:TemplateField>
    <ItemTemplate><%# (Container.DataItem as JobSeeker).Mobile.IsValid() %></ItemTemplate>
    </asp:TemplateField>
    </Columns>
    </asp:GridView>