2

メートルの表があります。次に、メーター読み値のテーブル (メーター テーブルへの参照と、日付の列と読み値の列があります)。アイデアは、毎日、特定のメーターの読みを記録するというものです。UI は問題なく動作し、メーターを選択し、ボタンをクリックして新しい Reading を追加すると、空白の "Reading" 行が Readings グリッドに追加されます。読み値の入力日付のデフォルトは今日です。

私がやりたいことは、読み取り日を特定のメーターの最後の読み取り日 + 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();を使用して新しいReadingを追加する場合 新しく追加されたReadingには、その親Meterがすでに正しく設定されています。

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 テーブルのレコードをフィルター処理する必要がなくなり (リレーションシップがそれを行います)、それらを並べ替える必要もありませ。記録)。

于 2012-08-14T01:56:40.410 に答える
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 に答える
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 に答える