somewhere » 23 мар 2007, 09:25
Вот сразу бы выложил, я ведь об о твоем коде говорил.
Во первых, непонятно
" писал(а):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;
Вот сразу бы выложил, я ведь об о твоем коде говорил.
Во первых, непонятно[quote="""]if ValueListEditor2.RowCount > 2 then[/quote]
Почему именно > 2, если есть хотя бы один ключ и значение, тогда > 0. Попрошу не путать с гридами.
Во-вторых, проверка не имеет смысла, т.к. sv1 никогда не будет пустым.[quote="""]sv1 := s + '=' + s1;
if not (sv1 = '') then
a.Add(sv1);[/quote]
В-третьих, найдя ключ, дальше его искать не надо, иначе они будут дублироваться.
В-четвертых, есть прекрасный метод FindRow, который ищет по ключу номер Row, где он его нашел. Вообщем выкидываем все лишнее, и получаем примерно это:
[code]
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;
[/code]