Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2008.08.24;
Скачать: [xml.tar.bz2];

Вниз

Сделать недоступным столбец в DBGrid   Найти похожие ветки 

 
Евгений   (2007-12-11 00:39) [0]

Добрый вечер.
Попытался сделать недоступным столбец в DBGrid, но варианты закончились быстро ;)
Кто поделится советом, мыслью - буду признателен.
С ув. Евгений.


 
Плохиш ©   (2007-12-11 00:43) [1]

Visible|Enabled := false


 
Германн ©   (2007-12-11 00:58) [2]

+
TDBGrid.Columns.Items[].ReadOnly:=False


 
Юрий Зотов ©   (2007-12-11 01:09) [3]

> Евгений   (11.12.07 00:39)

Посмотрите внимательно - разве в Инспекторе Объектов при редактировании свойств колонки не появляется свойство ReadOnly?


 
Евгений   (2007-12-11 01:39) [4]

Вероятно я не совсем точно сформулировал. Я хочу, чтобы поля этого столбца не выделялись, т.е. что-то типа TControl(DBGrid1).Enabled := false, но это не работает.


 
Евгений   (2007-12-11 01:40) [5]

Я хотел сказать TControl(DBGrid1.Columns.Items[0]).Enabled := false


 
{RASkov} ©   (2007-12-11 01:42) [6]

> [4] Евгений   (11.12.07 00:39)

Как вариант добавить к TDBGrid"у свойство типа OnSelectCell - TStringGrid"a....
unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, DB, DBTables, Grids, DBGrids;

type
 TMySelectCellEvent = procedure (Sender: TObject; AColumn: TColumn; var CanSelect: Boolean) of object;

 TMyDBGr = class(TDBGrid)
 private
   FOnSelectCell: TMySelectCellEvent;
 protected
   function SelectCell(ACol, ARow: Longint): Boolean; override;
   property OnSelectCell: TMySelectCellEvent read FOnSelectCell write FOnSelectCell;
 end;
 TDBGrid = class(TMyDBGr);

 TForm1 = class(TForm)
   DBGrid1: TDBGrid;
   DataSource1: TDataSource;
   Table1: TTable;
   procedure FormCreate(Sender: TObject);
 private
   procedure GridSelectCell(Sender: TObject; AColumn: TColumn; var CanSelect: Boolean);
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

{ TMyDBGr }

function TMyDBGr.SelectCell(ACol, ARow: Integer): Boolean;
begin
 Result := True;
 if Assigned(FOnSelectCell) then FOnSelectCell(Self, Columns[ACol-IndicatorOffset], Result);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
 DBGrid1.OnSelectCell:=GridSelectCell;
end;

procedure TForm1.GridSelectCell(Sender: TObject; AColumn: TColumn; var CanSelect: Boolean);
begin
 CanSelect:=AColumn.Index<>3;
end;

end.


 
Евгений   (2007-12-11 02:15) [7]

Спасибо огромное!
Буду пробовать, но уже завтра.


 
{RASkov} ©   (2007-12-11 02:50) [8]

> [7] Евгений   (11.12.07 02:15)

Вот заметил фичу одну неприятную, если столбец в данный момент выбран
и мы внешне запрещаем выбор этого столбца, т.е. меняем условие в GridSelectCell,
то получается неприятный скролл....
Оно может реально тебе и не понадобится(т.е. менять "запрещенные" столбцы во время выполнения), но все же...
Я проверял вот так:

procedure TForm1.FormCreate(Sender: TObject);
var N: Integer;
begin
 DBGrid1.OnSelectCell:=GridSelectCell;
 ComboBox1.Items.Clear;
 for N:= 0 to Table1.Fields.Count-1 do ComboBox1.Items.Add(Table1.Fields[N].FieldName);
 ComboBox1.ItemIndex:=DBGrid1.SelectedIndex;
end;

procedure TForm1.GridSelectCell(Sender: TObject; AColumn: TColumn; var CanSelect: Boolean);
begin
 CanSelect:=AColumn.FieldName<>ComboBox1.Text;
end;


Частично(а может и полностью) можно решить проблему так:
function TMyDBGr.SelectCell(ACol, ARow: Integer): Boolean;
begin
 Result := True;
 if Assigned(FOnSelectCell) then FOnSelectCell(Self, Columns[ACol-IndicatorOffset], Result);
 if not Result then Result:=SelectedIndex=ACol-IndicatorOffset;
end;


Т.е. если в данный момент мы находимся в столбце который запрещаем, то разрешать выделять в нем,
но стоит выбрать другой, то уже в него не вернутся.... Можно и другой вариант придумать,
например принудительный выход с заблокированного столбца.... но это сам думай)
Код написан на коленке, так что могут быть и еще всякие гадкие нюансы :(
:)

ЗЫ: И "подмена" компонента - это не совсем "красивый" вариант решения, был тут спор по этому поводу...
Я же этот способ использовал только ради "быстрого примера"....



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

Форум: "Основная";
Текущий архив: 2008.08.24;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.038 c
15-1215530569
Галинка
2008-07-08 19:22
2008.08.24
Потоки


2-1216297461
User
2008-07-17 16:24
2008.08.24
обработка ошибок записи SaveToFile


15-1215115864
Petr V. Abramov
2008-07-04 00:11
2008.08.24
Как объяснить женщине


15-1215118235
@!!ex
2008-07-04 00:50
2008.08.24
Узнать алгоритм шифрования.


2-1216590932
timekiller
2008-07-21 01:55
2008.08.24
Как выделить строку в TMemo?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский