質問

デフォルトでLightSwitchでは、画面上のリストまたはDatagridからアイテムを削除する場合、デフォルトで提供されている削除ボタンをクリックするか、「画面コード」を呼び出すことでVisualCollectionからアイテムをプログラムで削除することができます。

this.VisualCollection<Entity>.SelectedItem.Delete()
また
this.VisualCollection<Entity>.DeleteSelcted()

ただし、これは削除のために選択した行/エンティティをマークし、datagrid/listの左端の列に「x」を配置します。行はユーザーに表示されたままであり、これはプロセスのトランザクション/非同期性を反映していますが、行がリストから削除されることを期待するユーザーと混同しています。例えば:

顧客:私はそれを削除しましたなぜそれがまだそこにあるのですか...
私:左のXに気づきましたか?
顧客:ああ....ええと...
私:ええ...変更をクリックして、データベースに変更する必要があります。
顧客:....私はそのようにふりをするでしょう。
私:....それは良い若者です....

より良い方法は、削除が呼び出されたときにVisualCollectionからアイテムを削除することです。 静かに 変更を続けます。非同期性のために迷惑な待機/ロードポップアップがありません。

電話をかけようとしました this.VisualCollection<Entity>.RemoveSelected() しかし、それはaになります LightSwitchException - Current item cannot be removed

電話をかけた後、レコードを保存しようとしました Delete() しかし、それは画面上のすべての変更を保存し、前述のポップアップも表示し、優れたユーザーエクスペリエンスではありません。

役に立ちましたか?

解決

プログラムでデータグリッドに変更を加えた後、私が書いたこの関数を呼び出します。検証エラーを確認し、ユーザーが存在するかどうかを通知して、修正できるようにします。それ以外の場合は、背景の変化を静かに維持します。 「ポップアップを待機/ロードする」とはどういう意味かわかりません。唯一の兆候は、タブの画面名の横にある小さな青いスピナーです。

private void ValidateAndSave()
{
    //Check for validation errors
    if ((this.Details.ValidationResults.HasErrors == false)) {
        //Save the changes to the database
        try {
            this.DataWorkspace.DatabaseNameData.SaveChanges();
        } catch (Exception ex) {
            this.ShowMessageBox(ex.ToString());
        }
    } else {
        //If validation errors exist,
        string res = "";
        //Add each one to a string,
        foreach (object msg_loopVariable in this.Details.ValidationResults) {
            msg = msg_loopVariable;
            res = res + msg.Property.DisplayName + ": " + msg.Message + "\r\n";
        }

        //And display them in a message box
        this.ShowMessageBox(res, "Validation error", MessageBoxOption.Ok);
    }
}

注:これをVB.NETから変換したので、おそらく代替品の減少ではありません。特に、メッセージボックスは異なって行われていると思うので、それを再確認してください。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top