我目前正在使用 OnMouseOver 突出显示 radgrid 中的一行。我想知道是否可以使用 OnMouseOver 来选择行而不是突出显示它。
或者,如果 radgrid 失去焦点,例如弹出确认框时,我希望突出显示的行保持突出显示。
提前致谢。
根据 Telerik 文档,应该可以使用以下代码选择 OnMouseOver 项(如果您没有任何详细信息表,则可以取消该if
语句并使用else
块中的代码来查找currentDataItem
):
function RadGrid1_RowMouseOver(sender, eventArgs) {
var currentDataItem = null;
// clear all currently selected items before selecting new
sender.get_masterTableView().clearSelectedItems();
if (eventArgs.get_itemIndexHierarchical().indexOf(':') > 0)
{
var detailTableIndex = eventArgs.get_itemIndexHierarchical().split(':')[0];
var rowIndex = eventArgs.get_itemIndexHierarchical().split(':')[1].split('_')[1];
currentDataItem = sender.get_detailTables()[detailTableIndex].get_dataItems()[rowIndex];
}
else
{
currentDataItem = sender.get_masterTableView().get_dataItems()[eventArgs.get_itemIndexHierarchical()];
}
if (currentDataItem != null)
{
currentDataItem.set_selected(true);
}
}
此处的其他答案不适用于 WPF Telerik RadGridView,因为我们无权访问 RowMouseOver 事件。
对于 WPF Telerik RadGridView,如果网格不包含 UI 元素,最好的方法是在带有 IsMouseOver 的 Linq 表达式中使用 ChildrenOfType<>。
private void myGridView_MouseMove(object sender, System.Windows.Input.MouseEventArgs e)
{
MyCustomClass myClass = null;
var rows = this.myGridView.ChildrenOfType<GridViewRow>().Where(r => r.IsMouseOver == true);
foreach (var row in rows)
{
if (row is GridViewNewRow) break;
GridViewRow gvr = (GridViewRow)row;
myClass = (MyCustomClass)gvr.Item;
}
// do something with myClass here if we have found a row under mouse
}
谢谢!您的解决方案效果很好,但是即使将 AllowMultiRowSelection 设置为 False,当将鼠标悬停在另一行上时,行也不会被取消选中。当鼠标悬停在行上时,以下代码将在 radgrid 中选择一行:
<script type="text/javascript">
function grdUsers_RowMouseOver(sender, eventArgs) {
var NumberItems = sender.get_masterTableView().get_dataItems().length;
for (var count = 0; count < NumberItems; count++) {
var currentDataItem = sender.get_masterTableView().get_dataItems()[count];
if (count == eventArgs.get_itemIndexHierarchical()) {
currentDataItem.set_selected(true);
}
else {
currentDataItem.set_selected(false);
}
}
}
</script>
我在以下位置调用了该函数:
<ClientSettings AllowColumnsReorder="True" ReorderColumnsOnClient="True">
<Selecting AllowRowSelect="True" />
<ClientEvents OnRowMouseOver="grdUsers_RowMouseOver" />
</ClientSettings>