2

我有一张米表。然后是一个仪表读数表(其中引用了仪表表,还有一个日期列和一个读数值列)。这个想法是,每天都会记录给定仪表的读数。UI 工作正常,我可以选择一个仪表,然后单击按钮添加一个新的读数,一个空白的“读数”行被添加到读数网格中。读数的输入日期默认为今天。

我想做的是将阅读日期默认为特定仪表的最后阅读日期,+ 1 天。我的设想是在 Reading_Created 处理程序中,我有这样的伪代码:

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

这在 Lightswitch 应用程序中是否可行?

4

3 回答 3

1

如果您使用this.ReadingCollection.AddNew();添加新的阅读 那么新添加的读数将具有其父仪表已经正确设置。

鉴于Meter与其Readings之间存在关系,您可以通过将代码修改为如下所示的内容来利用它:

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(如果没有记录)。

于 2012-08-14T01:56:40.410 回答
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());
                    }
                }
        }
     }
于 2014-04-05T12:28:02.737 回答
0

您可以将此代码添加到实体的 Created() 事件中:

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 条目,我没有测试这是否可行。

于 2012-08-13T20:38:38.047 回答