Конференция "Базы" » Значения первой и последней строк выделенного диапазона DBGridEh [D6]
 
  • Lyudik (19.04.10 17:49) [0]
    Доброго времени суток!
    У меня такая проблема возникла:
    В DBGridEh выделяю несколько строк (допустим 10) и мне надо получить данные, содержащиеся в первой и последней строках определенного столбца.
    Делала так:
    ....
    query.Bookmark:=dbgEhTable.Selectedrows.Items[0];
    Data1:= query.fieldbyname('FieldName').Value;
       query.Bookmark:=dbgEhTable.Selectedrows.Items[dbgEhTable.SelectedRows.Count-1];
    Data2:= query.fieldbyname('FieldName').Value;
    ...
    Но у меня возникает вот какая проблема: в переменные передаются значение столбца второй строки и значение столбца строки, следующей за последней выделенной строкой.
    В случае, если я делаю так
    ....
    query.Bookmark:=dbgEhTable.Selectedrows.Items[-1];
    Data1:= query.fieldbyname('FieldName').Value;
       query.Bookmark:=dbgEhTable.Selectedrows.Items[dbgEhTable.SelectedRows.Count-2];
    Data2:= query.fieldbyname('FieldName').Value;
    ...
    то у меня выдается сообщение List index out of bounds (-1).
    Подскажите, как решить проблему ... :(
    MultiSelect:=true;
  • sniknik © (19.04.10 19:30) [1]
    первый вариант правильный... почему работает не так как тобой ожидается... х.з., трассировать нужно, сравнивать значения.
    попробовать например выделить 10, а взять 2 значения  Items[0]; и Items[1]; посмотреть и убедится, что все правильно, потом вместо 1 поставить 9 и опять убедиться... заменить на переменную куда предварительно скопировать значение Count-1, посмотреть, что это за значение, сравнить с цифрой 9...
    блин, обычная отладка.
  • Lyudik (20.04.10 09:55) [2]

    > попробовать например выделить 10, а взять 2 значения  Items[0];
    >  и Items[1];

    передались в переменные значения второй и третьей строки...

    > вместо 1 поставить 9 и опять убедиться...

    передались в переменные значения 2 и 11 строки...

    > заменить на переменную
    > куда предварительно скопировать значение Count-1, посмотреть,
    > что это за значение, сравнить с цифрой 9...

    результат 11 строки...
  • sniknik © (20.04.10 10:46) [3]
    т.е. Count у тебя = 12... почему тогда уверяешь, что выделено 10?
  • sniknik © (20.04.10 10:50) [4]
    > передались в переменные значения второй и третьей строки...
    считая в выделении? а почему думаешь, что оно там по порядку? для примера зажми Ctrl и кликай мышкой сначала вниз таблицы, после вверх, повторяй дальше вниз/вверх выбирая еще не выделенные... в каком порядке будет список букмарков?
  • Lyudik (20.04.10 11:55) [5]
    нашла другой способ, который мне подходит

    //делаем активной колонку, данные которой нам необходимы
    dbgEhTable.FieldColumns['field_name'].Field.FocusControl;

    GotoBookmark(Pointer(dbgEhTable.SelectedRows.Items[0]));
    Data1:= dbgEhTable.SelectedField.Text;

    GotoBookmark(Pointer(dbgEhTable.SelectedRows.Items[bgEhTable.SelectedRows.Count-1]));
    Data2:= dbgEhTable.SelectedField.Text;

    //этот способ подходит, если строки выделены подряд
    //dbgEhTable.SelectedRows.Items[0] -первая строка в выделенном списке
    //dbgEhTable.SelectedRows.Items[bgEhTable.SelectedRows.Count-1] -последняя строка в выделенном списке
  • sniknik © (20.04.10 13:16) [6]
    > нашла другой способ, который мне подходит
    > GotoBookmark(Pointer(dbgEhTable.SelectedRows.Items[0]));
    это тоже самое что написанное в 0 присвоение Bookmark, вот посмотри код установки метода Bookmark (SetBookmarkStr) и найди 10 отличий...
 
Конференция "Базы" » Значения первой и последней строк выделенного диапазона DBGridEh [D6]
Есть новые Нет новых   [134433   +22][b:0][p:0]