ValueListEditor - суммировать Value совпадающих Name

Ответить

Код подтверждения
Введите код в точности так, как вы его видите. Регистр символов не имеет значения.

BBCode ВКЛЮЧЁН
[img] ВКЛЮЧЁН
[url] ВКЛЮЧЁН
Смайлики ОТКЛЮЧЕНЫ

Обзор темы
   

Развернуть Обзор темы: ValueListEditor - суммировать Value совпадающих Name

Re: ValueListEditor - суммировать Value совпадающих Name

Игорь Акопян » 27 мар 2007, 10:38

&quot писал(а):проверку имеет делать смысл
нет, ибо судя по
sv1 := s + '=' + s1;
sv1 всегда содержит хотябы "="

Re: ValueListEditor - суммировать Value совпадающих Name

Сейчас_не_спящий » 23 мар 2007, 17:39

БОЛЬШОЕ СПАСИБО!!! Всё правильно работает, сбоев не даёт, но
&quot писал(а):Во-вторых, проверка не имеет смысла, т.к. sv1 никогда не будет пустым.
Цитата:
Сообщение от Сейчас_не_спящий
sv1 := s + '=' + s1;
if not (sv1 = '') then
a.Add(sv1);
проверку имеет делать смысл, так как ВалуесЛистЭдитор в моей проге вполне может быть и пустым, он динамичен, но это уже нюансы моей софтинки. Всем спасибо, тему можно закрывать.

Re: ValueListEditor - суммировать Value совпадающих Name

Сейчас_не_спящий » 23 мар 2007, 17:35

БОЛЬШОЕ спасибо!! всё пашет правильно, сбоев не даёт, сенк
Но,
&quot писал(а):Во-вторых, проверка не имеет смысла, т.к. sv1 никогда не будет пустым.
Цитата:
Сообщение от Сейчас_не_спящий
sv1 := s + '=' + s1;
if not (sv1 = '') then
a.Add(sv1);
проверку имеет делать смысл, потому что я вылаживал лишь часть листинга проги, там с этим много чего подвязанно и тот ВалуесЛистЭдитор может быть пустым.
В общем большое спасибо, тему можно закрывать.

Re: ValueListEditor - суммировать Value совпадающих Name

somewhere » 23 мар 2007, 09:25

Вот сразу бы выложил, я ведь об о твоем коде говорил.
Во первых, непонятно
&quot писал(а):if ValueListEditor2.RowCount > 2 then
Почему именно > 2, если есть хотя бы один ключ и значение, тогда > 0. Попрошу не путать с гридами.
Во-вторых, проверка не имеет смысла, т.к. sv1 никогда не будет пустым.
&quot писал(а):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;

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

Лелик_1044 » 22 мар 2007, 16:49

Может ты добовляешь а не изменяешь?

Re: ValueListEditor - суммировать Value совпадающих Name

Сейчас_не_спящий » 22 мар 2007, 16:35

Всё люди, у самого идея пришла, реализовал вреде получилось. счас на баги проверю, если нормально, то вылажу код

Re: ValueListEditor - суммировать Value совпадающих Name

Лелик_1044 » 22 мар 2007, 16:25

Может ты добовляешь а не изменяешь?

Re: ValueListEditor - суммировать Value совпадающих Name

Сейчас_не_спящий » 22 мар 2007, 16:17

&quot писал(а):Ну что пустословить, код выкладывайте - сами все увидим...
будь добр, сделать и вылажи...
Я преверженец поговорки "в споре рождается истина"

Re: ValueListEditor - суммировать Value совпадающих Name

somewhere » 22 мар 2007, 16:05

&quot писал(а):нет, не в этом ошибка, я делаю преобразования
Ну что пустословить, код выкладывайте - сами все увидим...

Вернуться к началу