-
Доброго времени суток! У меня такая проблема возникла: В 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;
-
первый вариант правильный... почему работает не так как тобой ожидается... х.з., трассировать нужно, сравнивать значения. попробовать например выделить 10, а взять 2 значения Items[0]; и Items[1]; посмотреть и убедится, что все правильно, потом вместо 1 поставить 9 и опять убедиться... заменить на переменную куда предварительно скопировать значение Count-1, посмотреть, что это за значение, сравнить с цифрой 9... блин, обычная отладка.
-
> попробовать например выделить 10, а взять 2 значения Items[0]; > и Items[1];
передались в переменные значения второй и третьей строки...
> вместо 1 поставить 9 и опять убедиться...
передались в переменные значения 2 и 11 строки...
> заменить на переменную > куда предварительно скопировать значение Count-1, посмотреть, > что это за значение, сравнить с цифрой 9...
результат 11 строки...
-
т.е. Count у тебя = 12... почему тогда уверяешь, что выделено 10?
-
> передались в переменные значения второй и третьей строки... считая в выделении? а почему думаешь, что оно там по порядку? для примера зажми Ctrl и кликай мышкой сначала вниз таблицы, после вверх, повторяй дальше вниз/вверх выбирая еще не выделенные... в каком порядке будет список букмарков?
-
нашла другой способ, который мне подходит
//делаем активной колонку, данные которой нам необходимы 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] -последняя строка в выделенном списке
-
> нашла другой способ, который мне подходит > GotoBookmark(Pointer(dbgEhTable.SelectedRows.Items[0])); это тоже самое что написанное в 0 присвоение Bookmark, вот посмотри код установки метода Bookmark (SetBookmarkStr) и найди 10 отличий...
|