2012-08-13 10 views
2

我有一個Meters表。然後是一個Meter Readings表格(它具有對Meter表格的引用,以及對於Date和列的讀取值的列)。這個想法是,每天都會記錄給定儀表的讀數。用戶界面工作正常,我可以選擇一個儀表,然後點擊按鈕添加一個新的讀數,並將一個空白的「讀數」行添加到讀數網格中。讀數的輸入日期默認爲今天。Lightswitch中新行的自動遞增日期

我想要做的是默認閱讀日期到特定儀表的最後閱讀日期,+ 1天。我設想的是,在Reading_Created處理程序中,我有僞代碼是這樣的:

var lastDate = DataWorkspace.Data.Readings 
        .Where(r=> r.MeterID == this.MeterID) 
        .Max(r=> r.ReadingDate); 
    this.ReadingDate = lastDate.AddDays(1); 

在LightSwitch的應用程序是這可能嗎?

回答

0

你可以將此代碼添加到該實體的創建()事件:

partial void Readings_Created() 
{ 
    ReadingDate = (from o in this.DataWorkspace.Data.Readings 
        where MeterID == this.MeterID 
        orderby o.ReadingDate descending 
        select o).Take(1).Execute().Max(o => o.ReadingDate).AddDays(1); 
} 

我測試了一組類似的代碼,並計算新行的正確日期。如果沒有MeterID的條目,我沒有測試這是否可行。

+0

好吧技術上這一個工程......然而,在運行它時我看到「this.MeterID」依然是0 ...它尚未分配到新建的閱讀記錄。是否有任何方法可以使用父Meters網格中的選定儀表? – 2012-08-14 02:27:00

+0

而我發現上述評論中的行爲有點奇怪的是,在Readings網格中,只要新記錄顯示在那裏,它就有正確的MeterId分配。因此,將MeterID分配給Reading記錄是在Reading_Created事件之後發生的。很傷心。 – 2012-08-14 03:13:47

1

如果你正在添加新的閱讀使用this.ReadingCollection.AddNew();然後新增加將有其父母儀表已正確設置。

看到,因爲有儀表 &其讀數之間的關係,你可以什麼如下所示通過修改代碼利用的是:

partial void Reading_Created() 
{ 
    //get parent meter's existing Readings 
    var previousReadings = (from r in this.Meter.Readings select r) 

    //if previous readings exist for this meter, get the last date, & add a day to it 
    if (previousReadings.Any()) 
    { 
     this.ReadingDate = previousReadings.Max(d => d.ReadingDate).AddDays(1); 
    } 
    //otherwise, just use today's date 
    else 
    { 
     this.ReadingDate = Date.Today(); 
    } 
} 

這樣做,這樣,你就不需要過濾Readings表的記錄(這種關係對你有用),你不需要對它們進行排序,&你不需要TakeOne(如果沒有記錄,這將會失敗)。

+0

謝謝Yann。如何知道是否使用this.ReadingCollection.AddNew()添加新的Reading?我的GUI是一個ListAndDetails屏幕,其中我在列表部分選擇一個儀表,然後在詳細信息部分顯示該儀表的讀數網格。然後,我點擊該細節網格中的新記錄行。 – 2012-08-14 03:18:03

+0

啊,對不起。我在說你在你自己的代碼中使用AddNew。在你的情況下,LightSwitch爲你做了同樣的事情,所以父記錄的分配將是自動的。 – 2012-08-15 14:25:50

+1

但事實並非如此。根據我對「註冊用戶」的回答的迴應,這一點。MeterID == 0,this.Meter == null。我能做出錯誤的事情來獲得這種行爲嗎? – 2012-08-16 06:04:09

0
I know this post is older but for anyone researching the method, thanks to Beth Massi vid HDI#20 I came up with this for a similar screen. 

/此方法激發點擊綠色+按鈕時,着眼於收集和添加從所選項目的信息的新項目副本選擇的項目。/

partial void Worklists_Changed(NotifyCollectionChangedEventArgs e) 
    { 

      if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Add) 
     { 
      if (this.Worklists.Count > 1 & e.NewItems.Count == 1) 
       { 
        try 
        { 
         Worklist newRecord = (Worklist)e.NewItems[0]; 
         Worklist currentRecord = this.Worklists.SelectedItem; 

         newRecord.StartTime = currentRecord.StartTime.Value.AddDays(1); 
         newRecord.EndTime = currentRecord.EndTime.Value.AddDays(1); 
         newRecord.WorklistCode = currentRecord.WorklistCode; 
        } 

        catch (Exception ex) 
        { 
         Trace.TraceInformation("Could not copy data into new row " + ex.ToString()); 
        } 
       } 
     } 
    }