从DataGrid中删除一行

时间:2013-11-07 15:43:01

标签: c# visual-studio-lightswitch

默认情况下,在Lightswitch中,如果要从屏幕列表或DataGrid中删除项目,可以单击默认提供的删除按钮,也可以通过调用“屏幕代码”以编程方式从VisualCollection中删除该项目。

this.VisualCollection<Entity>.SelectedItem.Delete()

this.VisualCollection<Entity>.DeleteSelcted()

但是,这标记了所选的行/实体以进行删除,并在DataGrid / List的最左侧列中放置一个“X”。该行对用户仍然可见,虽然这确实反映了该进程的事务/异步性质,但是对于期望从列表中删除该行的用户来说,这会让人感到困惑。例如:

  

客户:我删除了为什么它仍然存在...   
我:你注意到左边的x了吗?   
顾客:哦....嗯......   
我:是的...您需要单击“保存”以将更改保留到数据库中。   
客户:......我会假装这样有意义。   
我:......那是个好孩子......

更好的方法是在调用delete时从VisualCollection中删除该项,然后静默保持更改。由于异步性质,没有恼人的等待/加载弹出窗口。

我尝试过调用this.VisualCollection<Entity>.RemoveSelected(),但会产生LightSwitchException - Current item cannot be removed

我在调用Delete()后尝试保存记录但是会在屏幕上保存所有更改,并且还显示上述弹出窗口并且不是一个良好的用户体验。

1 个答案:

答案 0 :(得分:0)

在以编程方式对DataGrid进行任何更改后,我调用了我编写的这个函数。它将检查是否存在任何验证错误,并告知用户它们是否存在以便纠正它们。否则,它将默默地在后台保持更改。我不确定“等待/加载弹出窗口”是什么意思。唯一的指示是选项卡上屏幕名称旁边的小蓝色微调器一两秒钟。

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转换了这个,所以它可能不是替代品。特别是我认为消息框的完成方式不同,所以请仔细检查。