首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >AddNewRecord XamDataGrid

AddNewRecord XamDataGrid
EN

Stack Overflow用户
提问于 2012-11-28 04:51:11
回答 2查看 3.2K关注 0票数 2

在AddNewRecord行中输入值并在XamDataGrid上单击该行之外的任何位置后,似乎会将该行添加到集合中。

如何防止鼠标单击向集合中添加新行。

希望能帮上忙

EN

回答 2

Stack Overflow用户

发布于 2013-01-01 04:56:08

在AddNewRecord之外单击将结束记录的编辑模式,如果存在更改,则会在那时提交这些更改,这意味着将添加新记录。如果您希望在按Enter键时仅允许提交记录,而不是通过单击网格中的另一个记录,则可以使用以下逻辑将鼠标左键按下设置为已处理:

代码语言:javascript
复制
private bool editingAddNewRecord = false;
void XamDataGrid1_EditModeEnded(object sender, Infragistics.Windows.DataPresenter.Events.EditModeEndedEventArgs e)
{
    this.editingAddNewRecord = false;
}

void XamDataGrid1_EditModeStarted(object sender, Infragistics.Windows.DataPresenter.Events.EditModeStartedEventArgs e)
{
    this.editingAddNewRecord = e.Cell.Record.IsAddRecord;
}

void XamDataGrid1_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    if (editingAddNewRecord)
    {
        DataRecordPresenter drp = Infragistics.Windows.Utilities.GetAncestorFromType(e.OriginalSource as DependencyObject, typeof(DataRecordPresenter), true) as DataRecordPresenter;
        if (!(drp != null && drp.IsAddRecord))
        {
            e.Handled = true;
        }
    }           
}
票数 2
EN

Stack Overflow用户

发布于 2014-02-06 06:17:25

感谢你的回答@alhalama!

我注意到您没有按下鼠标右键,即使我们这样做了,您的解决方案也无法支持它。此外,使用您的解决方案,我无法编辑任何其他单元格,直到我在Add New Row记录上点击了Enter或Escape (这可能是一些人想要的,但不是我)。下面是我修改过的解决方案,当用户单击添加新记录行的单元格时,该解决方案会撤消对该单元格的更改,该解决方案还会处理所有鼠标单击(左、右、中等)。

代码语言:javascript
复制
// Used to record when the user is editing a value in the Mass Edit row.
private DataRecord _addRecordCellBeingEdited = null;

private void XamDataGrid1_EditModeStarted(object sender, Infragistics.Windows.DataPresenter.Events.EditModeStartedEventArgs e)
{
    if (e.Cell.Record.IsAddRecord)
        _addRecordCellBeingEdited = e.Cell.Record;
}

private void XamDataGrid1_EditModeEnded(object sender, Infragistics.Windows.DataPresenter.Events.EditModeEndedEventArgs e)
{
    _addRecordCellBeingEdited = null;
}

private void XamDataGrid1_PreviewMouseDown(object sender, MouseButtonEventArgs e)
{
    if (_addRecordCellBeingEdited != null)
    {
        DataRecordPresenter drp = Infragistics.Windows.Utilities.GetAncestorFromType(e.OriginalSource as DependencyObject, typeof(DataRecordPresenter), true) as DataRecordPresenter;
        if (!(drp != null && drp.IsAddRecord))
        {
            _addRecordCellBeingEdited.CancelUpdate();
        }
    }  
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13592818

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档