我目前在使用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