我目前在使用OnMouseOver的radgrid中突出显示一行。我想知道是否可以使用OnMouseOver来选择行而不是突出显示它。有没有办法使用OnMouseOver来选择一个radgrid行?
或者,我想突出显示的行在radgrid失去焦点时保持突出显示,例如弹出确认框时。
在此先感谢。
我目前在使用OnMouseOver的radgrid中突出显示一行。我想知道是否可以使用OnMouseOver来选择行而不是突出显示它。有没有办法使用OnMouseOver来选择一个radgrid行?
或者,我想突出显示的行在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);
}
}
谢谢!您的解决方案效果很好,但即使将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>
这里其他的答案不工作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
}
我在上面的示例中添加了您要查找的功能。我使用clearSelectedItems()而不是循环遍历网格中的所有项目。当网格包含多行时应该有更好的性能。另外,我不确定这里的大图是什么,但是您确定要选择mouseover上的行吗?如果用户不小心,他们可能会选择不同的行,当他们尝试将鼠标从网格移开时,他们不想选择它们。 – 2010-06-10 14:25:57
非常感谢!在我的情况下选择行没有功能,除了突出显示行。我面临的问题是,当用户点击行内删除按钮并且确认框会弹出时,行不会突出显示(除非选择该行),导致radgrid失去焦点。现在,用户将确认他们在确认删除时删除了正确的行。 – Starwfanatic 2010-06-10 14:41:25