Есть ли способ использовать OnMouseOver для выбора строки Radgrid? - PullRequest
1 голос
/ 10 июня 2010

В настоящее время я выделяю строку в Radgrid, используя OnMouseOver.Я хотел бы знать, возможно ли использовать OnMouseOver, чтобы выделить строку, а не выделить ее.

В качестве альтернативы, я хотел бы, чтобы выделенная строка оставалась выделенной, если радгрид теряет фокус, например, когда появляется окно подтверждениявыскакивает.

Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 10 июня 2010

Согласно документации 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);
    }
}
1 голос
/ 29 января 2015

Другие ответы здесь не работают с WPF Telerik RadGridView, так как у нас нет доступа к событию RowMouseOver.

Для WPF Telerik RadGridView наилучший подход, если сетка не содержит элементов интерфейсаэто использовать ChildrenOfType <> в выражении Linq с IsMouseOver.

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
}
0 голосов
/ 10 июня 2010

Спасибо! Ваше решение работало отлично, но строки не останутся невыбранными при наведении курсора на другую строку, даже если для 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>
...