2012-06-29 1 views
4

У меня есть dojox.grid.DataGrid, где я хочу выбирать строку программно. Я использую setSelected() для этого, и он работает в первый раз. Однако, вызывая его второй раз для другой строки, вы выделите предыдущую строку. Кроме того, если я попытаюсь повторно выбрать строку, которая была выбрана ранее, событие onSelected не срабатывает. Но если я на самом деле щелкнул в сетке, это очистит вещи: строки, которые были выделены в сетке, прежде чем получить неосвещенный и невыбранный.setSelected() в dojo DataGrid оставляет предыдущий выбор активным даже для сетки с выборомMode = "single"

Код выглядит так:

if (grid.rowCount > 0 && idx < grid.rowCount) 
{ 
    grid.selection.setSelected(idx, true); 
    grid.render(); 
} 

Это как если бы у меня был множественный выбор включен, но я объявил сетку как SelectionMode = «сингл».

<table dojoType="dojox.grid.DataGrid" 
    id="hotTablesForAppDg" 
    autoWidth="true" autoHeight="true" selectionMode="single" 
    onSelected="autonomics.Clusters.loadTableDetails(this)"> 

Есть ли что-то еще, что мне нужно, чтобы очистить предыдущий выбор?

ответ

8

Проблема решена. Вам нужно позвонить setSelected (..., ложь) от выбранного индекса:

if (grid.rowCount > 0 && idx < grid.rowCount) 
{ 
    if (grid.selection.selectedIndex >= 0) 
    { 
     // If there is a currently selected row, deselect it now 
     grid.selection.setSelected(grid.selection.selectedIndex, false); 
    } 
    grid.selection.setSelected(idx, true); 
    grid.render(); 
} 
+0

миллион раз СПАСИБО! –

+0

где я получу idx? –

7

Я была такая же проблема, сетки, имеющие предыдущий выбор активен. Следующая строка кода grid.selection.clear(); перед вызовом render(), разрешил проблему. Надеюсь это поможет.

+0

Работал для меня. Благодарю. – shaffooo