C# 如何将焦点设置在数据网格中的下一个/上一个单元格上?尤其是在调用grid.committedit()之后?
我有一个自定义的combobox模板,因为一些绑定内容不能与“default”combobox列一起使用 为了让它看起来“漂亮”,我有一个用于编辑模式的组合框模板和一个用于“正常”模式的标签模板 现在,由于这个原因,我必须在CellEditEnding事件中手动提交对combobox的编辑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
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标记。不管怎样,我想我理解你在那里做的事情,得到你想要聚焦/编辑的对象,并在其上设置聚焦。我想我得做点类似的事。谢谢作为一个更新,我从来没有设法让它工作。我目前正在做项目的另一部分。