2016-04-12 28 views
0

Bir ObjectDataSource var, tüm yöntemlerle statik sınıf durumuna bağlanın: serviceRecord sınıfı örnekleriyle çalışmak için seçin, güncelleyin, ekleyin ve silin. İyi görünüyor. Ancak GridView ile bağladığımda GridView, herhangi bir serviceRecord özelliğini ve otomatik sütun oluşturmaz. Otomatik nesil olmadan bir istisna yapıyorum: HttpException (0x80004005): Seçili veri kaynağında 'serviceStart' adı bulunan bir alan veya özellik bulunamadı.ASP.NET GridView özellikleri bulamıyor

 <div style="text-align: center"> 
      <asp:ObjectDataSource ID="ServiceRecordsDataSource" runat="server" 
       DataObjectTypeName="LaretsState.serviceRecord" TypeName="LaretsState.state" 
       DeleteMethod="deleteRecord" InsertMethod="addRecord" 
       SelectMethod="getRecords" UpdateMethod="updateRecord" > 
      </asp:ObjectDataSource> 

      <asp:GridView ID="GridView" runat="server" AutoGenerateColumns="False" 
       ObjectDataSourceId ="ServiceRecordsDataSource" DataSourceID="ServiceRecordsDataSource"> 

       <Columns> 
        <asp:BoundField DataField="serviceStart" DataFormatString="dd:MM:yyyy hh:mm" HeaderText="Date and time of service" /> 
        <asp:BoundField DataField="serviceDuration" DataFormatString="mm" HeaderText="Duration" /> 
        <asp:BoundField DataField="creationTime" DataFormatString="dd.MM.yyyy hh.mm" HeaderText="Creation time" /> 
       </Columns> 

      </asp:GridView> 

sınıfları şunlardır: o somthing yanlış bir sınıflarıyla

 namespace LaretsState 
    { 

     public static class state 
     { 

      public static actualState actualState 
      { get { return new actualState(getActualState(), getNextRecord()); } } 

      private static List<serviceRecord> _plan = new List<serviceRecord>(); 

      static state() { } 

      public static List<serviceRecord> getRecords() 
      { 
       return _plan; 
      } 

      public static void updateRecord(serviceRecord record) 
      { 
       serviceRecord newRecord = record; 
       lock (_plan) 
       { 
        serviceRecord oldRecord = _plan.Where(r=> r.id== record.id).FirstOrDefault(); 
        if (oldRecord == null) 
        { throw new ArgumentException("В плане отсутствует запись с id " + record.id, "recordid"); } 

        var ColissionRecords = GetCollisionRecords(newRecord); 

        if (ColissionRecords.Count() > 1 || 
         ColissionRecords.Count() == 1 && !ColissionRecords.Contains(oldRecord)) 
        { throw new Exception("На предложенное время уже запланировано обслуживание"); } 

        oldRecord = newRecord; 
        //_plan.Remove(oldRecord); 
        //_plan.Add(newRecord); 
       } 
      } 

      public static void deleteRecord(serviceRecord record) 
      { 
       _plan.Remove(record); 
      } 

      public static void addRecord(serviceRecord record) 
      { 
       lock (_plan) 
       { 
        var ColissionRecords = GetCollisionRecords(record); 

        if (ColissionRecords.Count() > 1) 
        { throw new Exception("На предложенное время уже запланировано обслуживание"); } 

        _plan.Add(record); 
       } 
      } 

      private static List<serviceRecord> GetCollisionRecords (serviceRecord record) 
      { 
       return _plan.Where(r => r.serviceStart <= record.serviceStart.Add(record.serviceDuration) 
         && r.serviceStart.Add(r.serviceDuration) > record.serviceStart).ToList(); 
      } 

      private static serviceRecord getNextRecord() 
      { 
       DateTime nowdate = DateTime.Now; 

       if (_plan.Count() == 0) return null; 

       return _plan 
        .Where(r => r.serviceStart > nowdate) 
        .OrderBy(r => r.serviceStart) 
        .First(); 
      } 

      private static serviceState getActualState() 
      { 
       DateTime nowDateTime = DateTime.Now; 
       var recordsInProgress = _plan.Where(r => r.serviceStart <= nowDateTime 
        && r.serviceStart.Add(r.serviceDuration) > nowDateTime).Count(); 

       if (recordsInProgress >0) 
       { return serviceState.OnService; } 
       else 
       { return serviceState.Normal; } 
      } 
    } 
     } 

} 


    namespace LaretsState 
{ 
    [DataContract] 
    public class serviceRecord 
    { 
     private static int lastid = 0; 
    [DataMember] 
    public DateTime serviceStart; 
    [DataMember] 
    public TimeSpan serviceDuration; 
    [DataMember] 
    public readonly DateTime creationTime; 
    [DataMember] 
    public readonly int id; 

    public serviceRecord (DateTime serviceStart, TimeSpan serviceDuration) 
     :this() 
    { 
     this.serviceStart = serviceStart; 
     this.serviceDuration = serviceDuration; 
    } 

    public serviceRecord() 
    { 
     this.creationTime = DateTime.Now; 
     this.id = ++lastid; 
    } 
    } 
} 

mi?

cevap

0

Bulundu! ServiceRecord sınıfında, özellikleri kullanmam gerekir, alanlar değil:

[DataMember] 
    public DateTime serviceStart { get; set; } 
    [DataMember] 
    public TimeSpan serviceDuration { get; set; } 
    [DataMember] 
    public DateTime creationTime { get;} 
    [DataMember] 
    public int id { get;}