Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.05.20;
Скачать: CL | DM;

Вниз

stringgrid строки   Найти похожие ветки 

 
Сорокин М   (2007-04-22 22:34) [0]

в гриде орбразуются пустые строки,можно ли как-нибудь исключить их?т.е. если пучтая,то найти ггде след не пустая и поставить на место пусто:)
сам запутолся


 
Loginov Dmitry ©   (2007-04-22 22:51) [1]

Проверка на пустую строку:
if Trim(Grid.Rows[I]) = "" then...

Присвоение строки:
Grid.Rows[I - 1] := Grid.Rows[I]


 
Сорокин М   (2007-04-22 23:02) [2]

Т.е. 4 строка должна замениться на 5,а 5 стать пустой...
var
i,j:integer;
begin
for i:=0 to stringgrid1.ColCount - 1 do begin
stringgrid1.Cells[i,2]:=inttostr(i);
stringgrid1.Cells[i,3]:=inttostr(i);
stringgrid1.Cells[i,5]:=inttostr(i);
end;
for j:=1 to stringgrid1.RowCount -1  do
if stringgrid1.Cells[0,j]="" then begin
for i:=0 to stringgrid1.ColCount - 1 do begin
stringgrid1.Cells[i,j]:=stringgrid1.Cells[i,j+1];
stringgrid1.Cells[i,j+1]:="";
end;

end;


 
{RASkov}   (2007-04-22 23:05) [3]

var R, C, N: Integer;
begin
 for C := StringGrid.FixedCols to StringGrid.ColCount-1 do begin
  R := StringGrid.FixedRows;
  while R < StringGrid.RowCount-1 do begin
   N := R+1;
    while (StringGrid.Cells[C, N] = "") and (N < StringGrid.RowCount-1) do INC(N);
    if StringGrid.Cells[C, N] <> "" then begin
     StringGrid.Cells[C, R] := StringGrid.Cells[C, N];
     StringGrid.Cells[C, N] := "";
    end;
   INC(R);
  end;
 end;
end;


 
Сорокин М   (2007-04-22 23:10) [4]

RASkov, что ты за человек такой? какой раз мне уже помогаешь...и всегда то что надо. Если бы смог, отблагодарил бы. Памятник тебе, и другим постоянным обитателям мастеров


 
{RASkov}   (2007-04-22 23:16) [5]

Там в [3] ошибка вот:
......
  while R<StringGrid.RowCount-1 do begin
   N:=R+1;
   if StringGrid.Cells[C, R]<>"" then begin INC(R); Continue; end;
.......

так исправить надо, иначе первую строку удаляет всегда.
> [4] Сорокин М   (22.04.07 23:10)

:)


 
Германн ©   (2007-04-22 23:48) [6]

Проще было бы пустые строки удалять методом DeleteRow и не забывать уменьшать RowCount при этом. Имхо.


 
{RASkov}   (2007-04-23 00:09) [7]

> [6] Германн ©   (22.04.07 23:48)
>Проще было бы пустые строки удалять методом DeleteRow и не забывать уменьшать RowCount при этом.

Германн, каким образом?, например
1 1 1
1 1
111
1 1 1
1 1
1 1 1

Если все уплывет я не виноват :). Хотел покозать, что совсем пустых Rows может и не быть....


 
{RASkov}   (2007-04-23 00:12) [8]

Уплыло :( но думаю мысль понята....

111 |     | 111
   | 111 |
   |     | 111
   |     |
111 | 111 |
   |     | 111

Навсяк еще раз.


 
Германн ©   (2007-04-23 00:18) [9]


> Хотел покозать, что совсем пустых Rows может и не быть..
> .

Тогда и удалять нечего! Я именно так сабж и понял.


 
{RASkov}   (2007-04-23 00:31) [10]

> [9] Германн ©   (23.04.07 00:18)

Хм.. Точно. А я чёт сразу про ячейки подумал.... Иначе уж больно просто все - ответ в [1] тогда.
Поправка:
if Trim(Grid.Rows[I].Text) = "" then...
и замечание в [6]


 
Германн ©   (2007-04-23 00:46) [11]


> ответ в [1] тогда.

В [1] ответ неверный, поскольку по сабжу нужно перемещение строки, а не дублирование оных. А метод DeleteRow как раз и выполняет такое перемещение.
Только вот он перемещает на место удаляемой строки не следущую, а последнюю. :( Но зато сам заботится о RowCount.


 
{RASkov}   (2007-04-23 01:09) [12]

Тогда...:

type
 TMyGr = class(TCustomGrid)
   procedure DeleteRow(ARow: Longint); override;
 end;

procedure TMyGr.DeleteRow(ARow: Integer);
begin
 if ARow<RowCount then MoveRow(ARow, ARow + 1)
  else if RowCount>0 then RowCount := RowCount - 1;
end;

procedure TForm.ButtonClick(Sender: TObject);
var R: Integer;
begin
 R:=StringGrid.FixedRows;
 while (R<>StringGrid.RowCount) and (StringGrid.RowCount>StringGrid.FixedRows+1) do begin
  if Trim(StringGrid.Rows[R].Text)="" then begin TMyGr(StringGrid).DeleteRow(R); Continue; end;
  INC(R);
 end;
end;

...так :)


 
Германн ©   (2007-04-23 01:23) [13]


> {RASkov}   (23.04.07 01:09) [12]

Интересное решение сабжа.
Только:
1. в некоторых местах не хватает -1.
2. "непонятки" с procedure RowMoved, которая для TCustomGrid является "отмазкой" (Д6)


 
{RASkov}   (2007-04-23 01:36) [14]

> 1. в некоторых местах не хватает -1.

Где? :)

> 2. "непонятки" с procedure RowMoved, которая для TCustomGrid
> является "отмазкой" (Д6)

не совсем понял.... Я и не использую RowMoved. В D7 RowMoved - dynamic метод

или....
procedure TCustomGrid.MoveRow(FromIndex, ToIndex: Longint);
begin
 if Assigned(FRowHeights) then
   MoveExtent(FRowHeights, FromIndex + 1, ToIndex + 1);
 MoveAdjust(FCurrent.Y, FromIndex, ToIndex);
 MoveAdjust(FAnchor.Y, FromIndex, ToIndex);
 MoveAdjust(FInplaceRow, FromIndex, ToIndex);
 RowMoved(FromIndex, ToIndex);
 if Assigned(FRowHeights) then
   RowHeightsChanged;
 UpdateEdit;
end;

procedure TCustomGrid.RowMoved(FromIndex, ToIndex: Longint);
begin
end;

...выделенное не понятно...? Вобщем - 2. я не понял про что :(


 
Германн ©   (2007-04-23 01:47) [15]


> > 1. в некоторых местах не хватает -1.
>
> Где? :)
>

Ну например тут:

>  if ARow<RowCount then MoveRow(ARow, ARow + 1)
>

Ага. Значит и в Д7 RowMoved тоже "отмазка".


 
Loginov Dmitry ©   (2007-04-23 07:56) [16]

[1] - опечатался :(

Вот такой код может может пригодится (юзается мною уже в нескольких приложениях):


procedure TMainForm.sgDepListKeyDown(Sender: TObject; var Key: Word;
 Shift: TShiftState);
var
 I: Integer;  
begin
 case Key of
   VK_DOWN:
     begin
       // Если стоим на последней строке, то добавляем новую строку
       if (sgDepList.Row = sgDepList.RowCount - 1) and
         (Trim(sgDepList.Rows[sgDepList.RowCount - 1].Text) <> "") then
         sgDepList.RowCount := sgDepList.RowCount + 1;
     end;
   VK_UP:
     begin
       // Если курсор стоял на последней строке, она пустая, и > 1,
       // то удаляем ее
       if (sgDepList.Row > 1) and
         (sgDepList.Row = sgDepList.RowCount - 1) and
         (Trim(sgDepList.Rows[sgDepList.Row].Text) = "") then
       begin
         sgDepList.Rows[sgDepList.Row].Clear;
         sgDepList.RowCount := sgDepList.RowCount - 1;

         // Устанавливаем курсор на последнюю строку
         sgDepList.Row := sgDepList.RowCount - 1;
         Key := 0;
       end;
     end;
 end;

 if (Shift = [ssCtrl]) and (Key = VK_DELETE) then
 begin
   if Application.MessageBox(PChar(
     "Вы действительно хотите удалить данную запись?"),
     "Подтверждение",
     MB_OKCANCEL or MB_ICONQUESTION) = ID_OK then
   begin
     sgDepList.Rows[sgDepList.Row].Clear;
     // Перемещаем нижележащие записи на верх
     for I := sgDepList.Row to sgDepList.RowCount - 1 do
       sgDepList.Rows[I].Assign(sgDepList.Rows[I + 1]);

     if sgDepList.RowCount > 2 then
       sgDepList.RowCount := sgDepList.RowCount - 1;
   end;
 end;

end;


Правда автору вроде бы как уже давно помогли...


 
Сорокин М   (2007-04-23 13:42) [17]

!!!
Спасибо всем за ответы.
[12] то что надо!


 
{RASkov}   (2007-04-23 22:04) [18]

> [17] Сорокин М   (23.04.07 13:42)
> [12] то что надо!

Сбило меня с толку

> Только вот он перемещает на место удаляемой строки не следущую, а последнюю.

Всё немного проще, нежели в [12], вот:

type TMyGr = class(TCustomGrid);
procedure TForm1.ButtonClick(Sender: TObject);
var N: Integer;
begin
   for N := StringGrid.RowCount-1 downto StringGrid.FixedRows do
    if Trim(StringGrid.Rows[N].Text)="" then TMyGr(StringGrid).DeleteRow(N);
end;

:)


 
{RASkov} ©   (2007-04-27 19:51) [19]

Вот очередная поправка :)
type TMyGr = class(TCustomGrid);
procedure TForm1.ButtonClick(Sender: TObject);
var N: Integer;
begin
  for N := StringGrid.RowCount-1 downto StringGrid.FixedRows do
   if Trim(StringGrid.Rows[N].Text)="" then if StringGrid.RowCount-1>StringGrid.FixedRows then TMyGr(StringGrid).DeleteRow(N);
end;



Страницы: 1 вся ветка

Текущий архив: 2007.05.20;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.048 c
2-1177920614
Regent
2007-04-30 12:10
2007.05.20
ПЕРЕВЕСТИ Дробное число в строку.


2-1178002029
Click[Up]
2007-05-01 10:47
2007.05.20
Поиск текст не зависимо от регистра в БД


3-1172784728
weer
2007-03-02 00:32
2007.05.20
Как вставить картинку из базы в Access в Delphi


2-1178012859
Познающий
2007-05-01 13:47
2007.05.20
Вставка рисунка


2-1177786996
Sonic90
2007-04-28 23:03
2007.05.20
Forms Position