Всем доброго времени суток!
Проблема такая:
Есть 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).
Как решить эту проблему? плиз хэлп.
ValueListEditor - суммировать Value совпадающих Name
Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду
- Сейчас_не_спящий
- Сообщения: 45
- Зарегистрирован: 26 янв 2007, 17:06
- Откуда: Беларусь, Гомель
- Контактная информация:
Всё не знает никто, но важно найти того кто знает нужное...
Если я не ошибаюсь, values у этого компонента имеет тип "строка". Может, ошибка связана с тем, что надо ее преобразовать в число?
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
- Сейчас_не_спящий
- Сообщения: 45
- Зарегистрирован: 26 янв 2007, 17:06
- Откуда: Беларусь, Гомель
- Контактная информация:
нет, не в этом ошибка, я делаю преобразования" писал(а):Если я не ошибаюсь, values у этого компонента имеет тип "строка". Может, ошибка связана с тем, что надо ее преобразовать в число?
Всё не знает никто, но важно найти того кто знает нужное...
Ну что пустословить, код выкладывайте - сами все увидим..." писал(а):нет, не в этом ошибка, я делаю преобразования
It's a long way to the top if you wanna rock'n'roll
- Сейчас_не_спящий
- Сообщения: 45
- Зарегистрирован: 26 янв 2007, 17:06
- Откуда: Беларусь, Гомель
- Контактная информация:
будь добр, сделать и вылажи..." писал(а):Ну что пустословить, код выкладывайте - сами все увидим...
Я преверженец поговорки "в споре рождается истина"
Всё не знает никто, но важно найти того кто знает нужное...
-
- Сообщения: 339
- Зарегистрирован: 22 ноя 2004, 19:15
- Откуда: Минск
- Контактная информация:
Может ты добовляешь а не изменяешь?
Просто набрать исходники может и любая обезьяна, а придумать и отладить не каждый человек.
- Сейчас_не_спящий
- Сообщения: 45
- Зарегистрирован: 26 янв 2007, 17:06
- Откуда: Беларусь, Гомель
- Контактная информация:
Всё люди, у самого идея пришла, реализовал вреде получилось. счас на баги проверю, если нормально, то вылажу код
Всё не знает никто, но важно найти того кто знает нужное...
-
- Сообщения: 339
- Зарегистрирован: 22 ноя 2004, 19:15
- Откуда: Минск
- Контактная информация:
Может ты добовляешь а не изменяешь?
Просто набрать исходники может и любая обезьяна, а придумать и отладить не каждый человек.
- Сейчас_не_спящий
- Сообщения: 45
- Зарегистрирован: 26 янв 2007, 17:06
- Откуда: Беларусь, Гомель
- Контактная информация:
Получилось, но не то что хотел
Пробовал отладить, не получается, помогите найти ошибку(хотя может я вообще не правильно делаю...).
На форме два ValueListEditor и кнопка, ValueListEditor1 надо сразу набить текстом, хотя бы несколько строк. Вот листинг:
Заранее спасибо
Пробовал отладить, не получается, помогите найти ошибку(хотя может я вообще не правильно делаю...).
На форме два 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;
Всё не знает никто, но важно найти того кто знает нужное...
Вот сразу бы выложил, я ведь об о твоем коде говорил.
Во первых, непонятно
Во-вторых, проверка не имеет смысла, т.к. sv1 никогда не будет пустым.
В-четвертых, есть прекрасный метод FindRow, который ищет по ключу номер Row, где он его нашел. Вообщем выкидываем все лишнее, и получаем примерно это:
Во первых, непонятно
Почему именно > 2, если есть хотя бы один ключ и значение, тогда > 0. Попрошу не путать с гридами." писал(а):if ValueListEditor2.RowCount > 2 then
Во-вторых, проверка не имеет смысла, т.к. 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;
It's a long way to the top if you wanna rock'n'roll