Поиск:

Ответ в темуСоздание новой темы Создание опроса
> StringGrid, удаление строки 
:(
    Опции темы
Reptile
Дата 10.11.2006, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 30.9.2006
Где: Украина, Первомай ск

Репутация: 2
Всего: 3



Под рукой Builder-а нету smile 
Пишу здесь могут быть опечятки smile 
Вот это вешаеш на нажатие кнопки:
Код

  Form2->Edit1->Text = StringGrid1.Cells[1][StringGrid1->Row];
  Form2->Edit2->Text = StringGrid1.Cells[2][StringGrid1->Row];
  Form2->Edit3->Text = StringGrid1.Cells[3][StringGrid1->Row];
  Form2->Edit4->Text = StringGrid1.Cells[4][StringGrid1->Row];
  Form2->ShowModal();

Это во второй форме на нажатие "Сохранить"(или как там у тебя...):
Код

  Form1->StringGrid1->Cells[1][Form1->StringGrid1->Row] = Form2->Edit1->Text;
  Form1->StringGrid1->Cells[2][Form1->StringGrid1->Row] = Form2->Edit2->Text;
  Form1->StringGrid1->Cells[3][Form1->StringGrid1->Row] = Form2->Edit3->Text;
  Form1->StringGrid1->Cells[4][Form1->StringGrid1->Row] = Form2->Edit4->Text;
  Close(); 

Если будут ошибки - пиши smile Буду благодарен за исправления.
P.S.Не забудь подключить формы друг к другу.


Это сообщение отредактировал(а) Reptile - 10.11.2006, 13:47
PM MAIL   Вверх
docwar
Дата 10.11.2006, 17:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 24.9.2006

Репутация: нет
Всего: нет



Reptile, спасибо огромное!!!
Я писал такой же код, но строка после редактирования добавлялась ПОСЛЕ, а не заменяла строку, текст которой помещался в Эдиты... поэтому и решил, что метод мой ошибочный! ))
Уже и перед нажатием на ОК (на форме редактирования) активировал ф-ию удаления строки и Form1->StringGrid1->RowCount--; писал.....
Как быть? =)

Добавлено @ 17:13 
Строка после редактирования добавляется после всех остальных строк....
PM MAIL   Вверх
Reptile
Дата 10.11.2006, 17:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 30.9.2006
Где: Украина, Первомай ск

Репутация: 2
Всего: 3



Цитата(docwar @  10.11.2006,  17:11 Найти цитируемый пост)
Я писал такой же код, но строка после редактирования добавлялась ПОСЛЕ, а не заменяла строку

Значит уже не такой smile 
Цитата(docwar @  10.11.2006,  17:11 Найти цитируемый пост)
Уже и перед нажатием на ОК (на форме редактирования) активировал ф-ию удаления строки и Form1->StringGrid1->RowCount--; писал.....
Как быть? =)

Не понял smile
Етот код редактирует, для добавления строки делай похожую форму но увеличивай Form1->StringGrid1->RowCount и добавляй.

Цитата(docwar @  10.11.2006,  17:11 Найти цитируемый пост)
Добавлено @ 17:13 
Строка после редактирования добавляется после всех остальных строк.... 

Как это? 
Код

  Form1->StringGrid1->Cells[1][Form1->StringGrid1->Row] = Form2->Edit1->Text;
  Form1->StringGrid1->Cells[2][Form1->StringGrid1->Row] = Form2->Edit2->Text;
  Form1->StringGrid1->Cells[3][Form1->StringGrid1->Row] = Form2->Edit3->Text;
  Form1->StringGrid1->Cells[4][Form1->StringGrid1->Row] = Form2->Edit4->Text;

Изменяет сущуствующие ячейки,он не добавляет
В чем вопрос?

PM MAIL   Вверх
docwar
Дата 10.11.2006, 18:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 24.9.2006

Репутация: нет
Всего: нет



Вопрос в том, что строка, которую мы выбираем для редактирования остается неизменной, а отредактированная добавляется ПОСЛЕ всех строк таблицы...

Цитата(Reptile @  10.11.2006,  17:50 Найти цитируемый пост)
Етот код редактирует, для добавления строки делай похожую форму но увеличивай Form1->StringGrid1->RowCount и добавляй.

Увеличивать RowCount или нет? Только смысл? Уменьшение желаемого результата тоже не принесло.

Забыл сказать, что у меня на главной форме прописано StringGrid1->Options = StringGrid1->Options << goRowSelect; ..... но это ни на что не должно влиять...
PM MAIL   Вверх
Reptile
Дата 10.11.2006, 18:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 30.9.2006
Где: Украина, Первомай ск

Репутация: 2
Всего: 3



Цитата(docwar @  10.11.2006,  18:21 Найти цитируемый пост)
Вопрос в том, что строка, которую мы выбираем для редактирования остается неизменной, а отредактированная добавляется ПОСЛЕ всех строк таблицы...

 smile
Покажи код навешаный на кнопку ОК. А лучше прикрепи проект, я проверю и завтра выложу smile 
Какие у Тебя значения в FixedRows и FixedCols ?

Цитата(docwar @  10.11.2006,  18:21 Найти цитируемый пост)
Увеличивать RowCount или нет?

Нет, если надо только редактировать.

Цитата(docwar @  10.11.2006,  18:21 Найти цитируемый пост)
Забыл сказать, что у меня на главной форме прописано StringGrid1->Options = StringGrid1->Options << goRowSelect; 

Это логично, иначе Ты бы не выделял всей строки smile 



Это сообщение отредактировал(а) Reptile - 10.11.2006, 18:45
PM MAIL   Вверх
docwar
Дата 10.11.2006, 18:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 24.9.2006

Репутация: нет
Всего: нет



FixedRows=1
StringGrid1->FixedCols = 0;

Сожалею, но весь проект прикрепить не могу....  smile 

Цитата(Reptile @  10.11.2006,  18:44 Найти цитируемый пост)
Покажи код навешаный на кнопку ОК.

Код
  Form1->StringGrid1->Cells[0][Form1->StringGrid1->Row] = Form2->Edit1->Text;
  Form1->StringGrid1->Cells[1][Form1->StringGrid1->Row] = Form2->Edit2->Text;
  Form1->StringGrid1->Cells[2][Form1->StringGrid1->Row] = Form2->Edit3->Text;
  Form1->StringGrid1->Cells[3][Form1->StringGrid1->Row] = Form2->Edit4->Text;
  Form1->StringGrid1->Cells[4][Form1->StringGrid1->Row] = Form2->Edit5->Text;
  Form1->StringGrid1->Cells[5][Form1->StringGrid1->Row] = Form2->Edit6->Text;
  Form1->StringGrid1->Cells[6][Form1->StringGrid1->Row] = Form2->Edit7->Text;
  Form1->StringGrid1->Cells[7][Form1->StringGrid1->Row] = Form2->Edit8->Text;
  Close(); 

PM MAIL   Вверх
Reptile
  Дата 10.11.2006, 19:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 30.9.2006
Где: Украина, Первомай ск

Репутация: 2
Всего: 3



Цитата(docwar @  10.11.2006,  18:53 Найти цитируемый пост)
Сожалею, но весь проект прикрепить не могу....  smile 

Тогда ничем не могу помочь smile 
У меня все работает smile 
Не могу понять
Цитата(docwar @  10.11.2006,  18:21 Найти цитируемый пост)
отредактированная добавляется ПОСЛЕ всех строк таблицы...

Как  smile 

Это сообщение отредактировал(а) Reptile - 10.11.2006, 19:30

Присоединённый файл ( Кол-во скачиваний: 8 )
Присоединённый файл  22.GIF 26,97 Kb
PM MAIL   Вверх
docwar
Дата 10.11.2006, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 209
Регистрация: 24.9.2006

Репутация: нет
Всего: нет



Reptile, вопрос решил добавление переменной, хранящей номер строки, которую мы хотим отредактировать.
Как же ты без этого сделал не пойму!

Спасибо большое за помощь!
PM MAIL   Вверх
Reptile
Дата 11.11.2006, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 30.9.2006
Где: Украина, Первомай ск

Репутация: 2
Всего: 3



Цитата(docwar @  10.11.2006,  12:59 Найти цитируемый пост)
Reptile, буду благодарен, если проект под Билдер адаптируешь

Бодьше не чем не могу помоч smile 


Присоединённый файл ( Кол-во скачиваний: 6 )
Присоединённый файл  StrinGrid.rar 4,29 Kb
PM MAIL   Вверх
XPyCT
Дата 2.7.2008, 14:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 24.8.2007
Где: Moldova

Репутация: 10
Всего: 10



Цитата(docwar @ 29.9.2006,  17:22)
Извините, но я не могу выделить строку. Это вообще возможно?

что тут  не ясного! хоть пост был давно но отпишу
Предположим у вас стрингрид  с одним выделенным рядом и одним выделенным столбцом!
нумерация в стрингриде идет с нуля!
и так первый фикс ряд =0  и фикс кол=0;

идем дальше вам нужно к примеру выделить ряд под номером №5

кидаем на форму едит и кнопку
Далее пишем там этот код по событию нажатия кнопки
Код

void __fastcall TForm1::Button1Click(TObject *Sender)
{
int cRow=StrToInt(Edit1->Text);

  if(cRow > StringGrid1->RowCount-1 || Edit1->Text.IsEmpty())
    ShowMessage("Диапазон рядов задан не верно!");
      else
       {
        StringGrid1->Row=cRow;
        StringGrid1->Options<<goRowSelect;  //  "<<" - так разрешаем выделение строки  ">>" -Так запрещаем
         // goEditing; "<<" - так разрешаем Редактирование таблицы  ">>" -Так запрещаем
       }
}



Одновременное применение своиств  goRowSelect и goEditing не дает эфекта (goEditing);- только goRowSelect 





Это сообщение отредактировал(а) XPyCT - 2.7.2008, 14:27
PM MAIL Skype   Вверх
XPyCT
Дата 4.7.2008, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 24.8.2007
Где: Moldova

Репутация: 10
Всего: 10



вот написал думаю поможет!
прошу не пинать сам не силен но пишу то что знаю и делал!
и так есть две формы
fmBaza - Главная форма
fmADD- Форма добавления товара
SGBaza- StringGrid

по нажатию клавиши ентер появляется форма добавления
которая смотрит какая колонка и ряд и исходя из этого  уже добавляет
привожу код 
1. Главная форма
Код

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop
#include<winuser.h>

#include "MAIN_Unit.h"
#include "ADD_ITEM_Unit.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TfmBaza *fmBaza;
int cRow,cCol; //Глобальные переменные
//---------------------------------------------------------------------------
__fastcall TfmBaza::TfmBaza(TComponent* Owner)
        : TForm(Owner)
{
     //Ввод начального значения
SGBaza->Cells[1][1]="Сахар";
SGBaza->Cells[2][1]="20,75";
SGBaza->Cells[3][1]="8,25";
}
//---------------------------------------------------------------------------
void __fastcall TfmBaza::FormShow(TObject *Sender)
{
SGBaza->ColWidths[0]=30;   //Задаем размер колонок
SGBaza->ColWidths[1]=150;
SGBaza->ColWidths[2]=80;
SGBaza->ColWidths[3]=80;

SGBaza->Cells[0][0]="№";     //Озаглавливание фикс ряда
SGBaza->Cells[1][0]="Найменование";
SGBaza->Cells[2][0]="Кол-во";
SGBaza->Cells[3][0]="Цена в руб";

SGBaza->SetFocus(); //Передача фокуса в таблицу
SGBaza->Options<<goTabs; //Разрешаем перемещение по таблице клавишей таб

//нумерация всех рядов
for(int i=1; i<SGBaza->RowCount; i++)
SGBaza->Cells[0][i]=i;
}
//---------------------------------------------------------------------------
void __fastcall TfmBaza::SGBazaKeyPress(TObject *Sender, char &Key)
{
if(Key==VK_RETURN)
   {
     cRow=SGBaza->Row; //Получаем Активную строку
     cCol=SGBaza->Col; //Полчаем  Активную колонку

     fmADD->Edit1->Text=SGBaza->Cells[cCol][cRow];
     fmADD->Show();
   }


}
//---------------------------------------------------------------------------
void __fastcall TfmBaza::btAddRowClick(TObject *Sender)
{
SGBaza->RowCount++;
cRow=SGBaza->RowCount-1;
cCol=1;//Делаем активным первую колонку последнего ряда
SGBaza->Row=cRow; //Делаем активным последний ряд
SGBaza->SetFocus(); //Передача фокуса в таблицу
//нумерация всех рядов
for(int i=1; i<SGBaza->RowCount; i++)
SGBaza->Cells[0][i]=i;
}
//---------------------------------------------------------------------------
void __fastcall TfmBaza::btDeleteRowClick(TObject *Sender)
{
if(SGBaza->Cells[1][1].IsEmpty()&& SGBaza->Cells[2][1].IsEmpty()&& SGBaza->Cells[3][1].IsEmpty())
 ShowMessage("Нечего удалять!");  //Если единственный ряд пустой
 else
 {

if (MessageDlg("Вы действительно хотите удалить запись? "+SGBaza->Cells[1][cRow],mtConfirmation,TMsgDlgButtons() << mbOK<<mbCancel,0)==mrOk)
  {   //Если всего один ряд то просто очищаем
    if(SGBaza->RowCount==2 && SGBaza->Row==1 )
   {
    SGBaza->Cells[1][1]="";
    SGBaza->Cells[2][1]="";
    SGBaza->Cells[3][1]="";
    }
    else
     {
     class TProxyGrid : public TStringGrid
    {
       public:
        using TStringGrid::DeleteRow;

   };

    ((TProxyGrid*)SGBaza)->DeleteRow(cRow);

    }
  }
  }

SGBaza->SetFocus(); //Передача фокуса  в таблицу
//нумерация всех рядов
for(int i=1; i<SGBaza->RowCount; i++)
SGBaza->Cells[0][i]=i;

}
//---------------------------------------------------------------------------
void __fastcall TfmBaza::SGBazaKeyDown(TObject *Sender, WORD &Key,
      TShiftState Shift)
{
if(Key==VK_INSERT)//Добавляем ряд при нажатии клав инсерт
fmBaza->btAddRow->Click();
}
//---------------------------------------------------------------------------




2. Форма добавления

Код

//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "ADD_ITEM_Unit.h"
#include "MAIN_Unit.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TfmADD *fmADD;
extern int cRow,cCol; //Глобальные переменные
//---------------------------------------------------------------------------
__fastcall TfmADD::TfmADD(TComponent* Owner)
        : TForm(Owner)
{
}
//---------------------------------------------------------------------------
void __fastcall TfmADD::Edit1KeyPress(TObject *Sender, char &Key)
{
int i,k,s=0;
char str[10];
  if(Key==VK_RETURN) //если нажата клавиша ентер
  {
    if(cCol==1)  //Просто добавляем или заменяем наименование товара
    fmBaza->SGBaza->Cells[cCol][cRow]=Edit1->Text;
    if(cCol==2)//Дабавляем к существующему количеству новое 2+2=4
     {
//---Конвертирование содержимого Edit1 и замена точки на запятую-
      strcpy(str,Edit1->Text.c_str());
       for(i=0; i<10; i++)
        if(str[i]=='.')
          str[i]=',';
          Edit1->Text=str;
//---Конвертирование содержимого Edit1 и замена точки на запятую---End--
          if(!fmBaza->SGBaza->Cells[cCol][cRow].IsEmpty())//Если ечейка не пустая
                {
fmBaza->SGBaza->Cells[cCol][cRow]= //Добавление количества
FloatToStr(StrToFloat(fmBaza->SGBaza->Cells[cCol][cRow])+StrToFloat(Edit1->Text));
                }
             else
                {  //если ечейка пустая
//---Конвертирование содержимого Edit1 и замена точки на запятую-
             strcpy(str,Edit1->Text.c_str());
            for(i=0; i<10; i++)
            if(str[i]=='.')
           str[i]=',';
            Edit1->Text=str;
//---Конвертирование содержимого Edit1 и замена точки на запятую---End-- ]
           fmBaza->SGBaza->Cells[cCol][cRow]=Edit1->Text;
                }
     }

  if(cCol==3)  //Просто добавляем или заменяем Цену
     {
//---Конвертирование содержимого Edit1 и замена точки на запятую-
             strcpy(str,Edit1->Text.c_str());
            for(i=0; i<10; i++)
            if(str[i]=='.')
           str[i]=',';
            Edit1->Text=str;
//---Конвертирование содержимого Edit1 и замена точки на запятую---End-- ]

    fmBaza->SGBaza->Cells[cCol][cRow]=Edit1->Text;
     }
     fmBaza->SGBaza->SetFocus(); //Передача фокуса  в таблицу
     //нумерация всех рядов
     for(int i=1; i<fmBaza->SGBaza->RowCount; i++)
     fmBaza->SGBaza->Cells[0][i]=i;
     Close();
  }
}
//---------------------------------------------------------------------------


PM MAIL Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0566 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.