2010-06-09 56 views

回答

2

根據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); 
    } 
} 
0

謝謝!您的解決方案效果很好,但即使將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> 
+1

我在上面的示例中添加了您要查找的功能。我使用clearSelectedItems()而不是循環遍歷網格中的所有項目。當網格包含多行時應該有更好的性能。另外,我不確定這裏的大圖是什麼,但是您確定要選擇mouseover上的行嗎?如果用戶不小心,他們可能會選擇不同的行,當他們嘗試將鼠標從網格移開時,他們不想選擇它們。 – 2010-06-10 14:25:57

+0

非常感謝!在我的情況下選擇行沒有功能,除了突出顯示行。我面臨的問題是,當用戶點擊行內刪除按鈕並且確認框會彈出時,行不會突出顯示(除非選擇該行),導致radgrid失去焦點。現在,用戶將確認他們在確認刪除時刪除了正確的行。 – Starwfanatic 2010-06-10 14:41:25

1

這裏其他的答案不工作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 
} 
相關問題