Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何将焦点设置在数据网格中的下一个/上一个单元格上?尤其是在调用grid.committedit()之后?_C#_Wpf_Datagrid_Combobox - Fatal编程技术网

C# 如何将焦点设置在数据网格中的下一个/上一个单元格上?尤其是在调用grid.committedit()之后?

C# 如何将焦点设置在数据网格中的下一个/上一个单元格上?尤其是在调用grid.committedit()之后?,c#,wpf,datagrid,combobox,C#,Wpf,Datagrid,Combobox,我有一个自定义的combobox模板,因为一些绑定内容不能与“default”combobox列一起使用 为了让它看起来“漂亮”,我有一个用于编辑模式的组合框模板和一个用于“正常”模式的标签模板 现在,由于这个原因,我必须在CellEditEnding事件中手动提交对combobox的编辑 private bool changeCommitInProgress = false; private void table_CellEditEnding(object sender, DataG

我有一个自定义的combobox模板,因为一些绑定内容不能与“default”combobox列一起使用

为了让它看起来“漂亮”,我有一个用于编辑模式的组合框模板和一个用于“正常”模式的标签模板

现在,由于这个原因,我必须在CellEditEnding事件中手动提交对combobox的编辑

private bool changeCommitInProgress = false;     
private void table_CellEditEnding(object sender, DataGridCellEditEndingEventArgs e)
            {
                if (e.EditingElement is ContentPresenter && e.EditAction == DataGridEditAction.Commit)
                {
                    if (!changeCommitInProgress)
                    {
                        changeCommitInProgress = true;
                        DataGrid grid = (DataGrid)sender;
                        grid.CommitEdit(DataGridEditingUnit.Row, false);
                        changeCommitInProgress = false;
                    }
                }
            }
这样做的问题是,它会将焦点从整个数据网格中移除。为了安全起见,除了Name属性和ItemsSource之外,我在datagrid上只更改了以下属性:

grid.AutoGenerateColumns = false;
grid.IsSynchronizedWithCurrentItem = true;
grid.SelectionUnit = DataGridSelectionUnit.Cell;

这是一个有趣的问题。我在嵌套的数据列表中也做过类似的工作,我必须在最后一个条目后添加一个新行,并关注新生成行的第一个文本框,也许您可以根据您的情况推断我的策略

protected void calcAvg(object sender, CommandEventArgs e)
{
    int row = Convert.ToInt32(e.CommandArgument.ToString()) - 1;
    DataListItem ActiveRow = dlMeasurements.Items[row];

// Snipped code doing stuff with current row
// Compare how many rows completed to number of rows requested
if (!(row + 1 == Convert.ToInt32(txtSample.Text)))
{
    // Create new row
    DataRow drNew = nextMeas.Tables[0].NewRow();
    nextMeas.Tables[0].Rows.Add(drNew);

    // Change item index and rebind
    dlMeasurements.EditItemIndex = row + 1;
    dlMeasurements.DataSource = nextMeas.Tables[0];
    dlMeasurements.DataBind();

    //Set focus with the Script Manager
    smInspection.SetFocus((TextBox)(dlMeasurements.Items[row + 1].FindControl("txtRead1")));
}
else
{
    // Otherwise close the measurements and show exit button
    dlMeasurements.EditItemIndex = -1;
    dlMeasurements.DataSource = nextMeas.Tables[0];
    dlMeasurements.DataBind();
    btnSaveAndPrint.Visible = true;
}
}
}

哦,这个函数是从datalist调用的,就像啊,起初我很困惑,但后来注意到你评论中的asp标记。不管怎样,我想我理解你在那里做的事情,得到你想要聚焦/编辑的对象,并在其上设置聚焦。我想我得做点类似的事。谢谢作为一个更新,我从来没有设法让它工作。我目前正在做项目的另一部分。