Страница 1 из 2
ValueListEditor - суммировать Value совпадающих Name
Добавлено: 22 мар 2007, 14:18
Сейчас_не_спящий
Всем доброго времени суток!
Проблема такая:
Есть 2 ValueListEditor, строки из 1го добовляются во 2й.
Что должно происходить:
Если Name из 1го совпадёт с Name из 2го, Name(string) во 2м остаётся, а Values(integer) во втором суммируется с Values(integer) из первого.
В чём главная проблема:
Всё это я сделать могу, только в результате получается что вместо того что бы заменять Values в ValueListEditor2 (т.е. в строке меняется только Values) оно добавляет ещё одно строку где Name = Name из 2, Values = Values(1) + Values(2).
Как решить эту проблему? плиз хэлп.
Re: ValueListEditor - суммировать Value совпадающих Name
Добавлено: 22 мар 2007, 15:02
Хыиуду
Если я не ошибаюсь, values у этого компонента имеет тип "строка". Может, ошибка связана с тем, что надо ее преобразовать в число?
Re: ValueListEditor - суммировать Value совпадающих Name
Добавлено: 22 мар 2007, 15:45
Сейчас_не_спящий
" писал(а):Если я не ошибаюсь, values у этого компонента имеет тип "строка". Может, ошибка связана с тем, что надо ее преобразовать в число?
нет, не в этом ошибка, я делаю преобразования
Re: ValueListEditor - суммировать Value совпадающих Name
Добавлено: 22 мар 2007, 16:05
somewhere
" писал(а):нет, не в этом ошибка, я делаю преобразования
Ну что пустословить, код выкладывайте - сами все увидим...
Re: ValueListEditor - суммировать Value совпадающих Name
Добавлено: 22 мар 2007, 16:17
Сейчас_не_спящий
" писал(а):Ну что пустословить, код выкладывайте - сами все увидим...
будь добр, сделать и вылажи...
Я преверженец поговорки "в споре рождается истина"
Re: ValueListEditor - суммировать Value совпадающих Name
Добавлено: 22 мар 2007, 16:25
Лелик_1044
Может ты добовляешь а не изменяешь?
Re: ValueListEditor - суммировать Value совпадающих Name
Добавлено: 22 мар 2007, 16:35
Сейчас_не_спящий
Всё люди, у самого идея пришла, реализовал вреде получилось. счас на баги проверю, если нормально, то вылажу код
Re: ValueListEditor - суммировать Value совпадающих Name
Добавлено: 22 мар 2007, 16:49
Лелик_1044
Может ты добовляешь а не изменяешь?
Re: ValueListEditor - суммировать Value совпадающих Name
Добавлено: 22 мар 2007, 21:09
Сейчас_не_спящий
Получилось, но не то что хотел
Пробовал отладить, не получается, помогите найти ошибку(хотя может я вообще не правильно делаю...).
На форме два ValueListEditor и кнопка, ValueListEditor1 надо сразу набить текстом, хотя бы несколько строк. Вот листинг:
Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
var
a : TStringList;
s, s1, s2, s3, sv1 : string;
i, j : integer;
begin
if ValueListEditor1.RowCount > 1 then
begin
a := TStringList.Create;
for i := 1 to ValueListEditor1.RowCount -1 do
begin
s := ValueListEditor1.Cells[0,i];
s1 := ValueListEditor1.Cells[1,i];
if ValueListEditor2.RowCount > 2 then
for j := 1 to ValueListEditor2.RowCount -1 do
begin
s2 := ValueListEditor2.Cells[0,j];
s3 := ValueListEditor2.Cells[1,j];
if s = s2 then
begin
ValueListEditor2.Cells[1,j] := IntToStr(StrToInt(s1) + StrToInt(s3));
end
else
begin
a.Add(ValueListEditor1.Cells[0,i] + '=' + ValueListEditor1.Cells[1,i]);
end
end
else
sv1 := s + '=' + s1;
if not (sv1 = '') then
a.Add(sv1);
end;
ValueListEditor2.Strings.AddStrings(a);
end;
end;
Заранее спасибо
Re: ValueListEditor - суммировать Value совпадающих Name
Добавлено: 23 мар 2007, 09:25
somewhere
Вот сразу бы выложил, я ведь об о твоем коде говорил.
Во первых, непонятно
" писал(а):if ValueListEditor2.RowCount > 2 then
Почему именно > 2, если есть хотя бы один ключ и значение, тогда > 0. Попрошу не путать с гридами.
Во-вторых, проверка не имеет смысла, т.к. sv1 никогда не будет пустым.
" писал(а):sv1 := s + '=' + s1;
if not (sv1 = '') then
a.Add(sv1);
В-третьих, найдя ключ, дальше его искать не надо, иначе они будут дублироваться.
В-четвертых, есть прекрасный метод FindRow, который ищет по ключу номер Row, где он его нашел. Вообщем выкидываем все лишнее, и получаем примерно это:
Код: Выделить всё
procedure TForm1.Button1Click(Sender: TObject);
var
a : TStringList;
s, s1 : string;
i, r : integer;
begin
if ValueListEditor1.RowCount > 0 then
begin
a := TStringList.Create;
for i := 1 to ValueListEditor1.RowCount -1 do
begin
s := ValueListEditor1.Cells[0,i];
s1 := ValueListEditor1.Cells[1,i];
if ValueListEditor2.FindRow(s, r)
then ValueListEditor2.Cells[1, r] := IntToStr(StrToInt(s1) + StrToInt(ValueListEditor2.Cells[1, r]))
else a.Add(ValueListEditor1.Cells[0,i] + '=' + ValueListEditor1.Cells[1,i]);
end;
ValueListEditor2.Strings.AddStrings(a);
end;
end;