Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Забыл как !!!


Автор: McDevil 12.2.2006, 17:46
В общем забыл самое простое(а ведь раньше делал как - то), и не знаю как это обьяснить - то. В общем надо, чтобы при указывании пола сотрудника сразу показывалось поле национальность соответственно "русский" или "русская" - эти значения берутся из справочника и из выпадающего списка. Для полного уточнения добавляю изображение не полянитесь скачайте плиз 91 кб...

Автор: Halt 12.2.2006, 18:41
Ниче не понимаю, обьясни толком, твоя имага только дело запутывает.

Автор: sexton 12.2.2006, 19:04
Нуу умных вариантов много... Могу навскидку подкинуть самый глупый и простой - писать в базу по два наименования для каждого пола и вести дополнительное поле, в котором будет соответствующий этому написанию пол...

Автор: McDevil 12.2.2006, 21:16
Цитата(sexton @ 12.2.2006, 19:04 Найти цитируемый пост)
Нуу умных вариантов много... Могу навскидку подкинуть самый глупый и простой - писать в базу по два наименования для каждого пола и вести дополнительное поле, в котором будет соответствующий этому написанию пол...

Мне надо чтоб выбрал ты пол - сразу поле национальность стало женског или мужского пола... Ети национальности идут из справочника т.е. существует таблица в которой есть поля nationmen и nationwomen и из которых берутся национальности... Если бы я не использовал DBGrid, а допустим типа DBEdit - ов накидал DBLoockUpComboBox - ов все было бы проще, я бы просто скрывал не нужный мне LoockUp и в принципе все, но надо вот именно так... smile

Автор: Foley 12.2.2006, 23:53
а тебе надо чтоб в гриде выбрал пол, а грид скрыл ненужную национальность?
тогда попробуй на таймер накидать процедурку...
чтоб поле становилось невидимым если неудовлетворяет значению...
если честно не догоняю что ты хочешь...


Автор: sexton 13.2.2006, 10:44
Цитата(McDevil @ 12.2.2006, 21:16 Найти цитируемый пост)
. Если бы я не использовал DBGrid, а допустим типа DBEdit - ов накидал DBLoockUpComboBox

Создаем в справочнике национальностей подобную структуру:

ID Пол Национальность
1 м русский
2 м нерусский
3 ж русская
4 ж нерусская

После чего фильтруем этот справочник по введенному значению пола...

Автор: McDevil 14.2.2006, 09:23
Да нет проще можно...

Автор: sexton 14.2.2006, 11:25
Цитата(McDevil @ 14.2.2006, 09:23 Найти цитируемый пост)
Да нет проще можно...

Не спорю. Например хранить для каждой записи национальности два написания - в женском и мужском роде.

Типа:
ID Национальность(м) Национальность(ж)


Автор: McDevil 14.2.2006, 11:36
Цитата(Foley @ 12.2.2006, 23:53 Найти цитируемый пост)
а тебе надо чтоб в гриде выбрал пол, а грид скрыл ненужную национальность?
тогда попробуй на таймер накидать процедурку...
чтоб поле становилось невидимым если неудовлетворяет значению...
если честно не догоняю что ты хочешь...

Причем тут таймер... Может что-то не догоняю...
Добавлено @ 11:37
Цитата(sexton @ 14.2.2006, 11:25 Найти цитируемый пост)
Не спорю. Например хранить для каждой записи национальности два написания - в женском и мужском роде.

Типа:
ID Национальность(м) Национальность(ж)

А можно как нибудь присвоить ячейке грида DBLoockUpComboBox...
Не, не затупил не обращай внимания...
Блин как-то это просто все делалось...

Автор: SergeBS 14.2.2006, 13:18
McDevil
LookupField, CalculatedField - 2 разумных варианта. Хинт: лукап не обязательно 1 поле smile

Автор: StayAtHome 14.2.2006, 16:35
Может это имелось ввиду?
DRKB:
Нередко в колонке DBGrid нужно вывести не реальное значение, хранящееся в поле соответствующей таблицы, а другие данные, соответствующие имеющимся (например, символьную строку вместо ее числового кода). В этом случае также используется метод TextOut свойства Canvas компонента TDBGrid:

Соответствующий код для Delphi имеет вид:
Код
procedure TForm1.DBGridDrawColumnCell(Sender: TObject; const Rect: TRect; 
DataCol: Integer; Column: TColumn;  State: TGridDrawState); 
begin 
  if Column.FieldName = 'VenueNo' then 
    with DBGrid1.Canvas do 
    begin 
      Brush.Color := clWhite; 
      FillRect(Rect); 
      if Table.FieldByName('VanueNo').Value = 1 then 
      begin 
        Font.Color := clRed; 
        TextOut(Rect.Right - 2 - DBGrid1.Canvas.TextWidth('our vanue'), 
        Rect.Top + 2, 'our vanue'); 
      end 
      else 
        TextOut(Rect.Right - 2 - DBGrid1.Canvas.TextWidth('other vanue'), 
        Rect.Top + 2, 'other vanue'); 
    end; 
end; 

Автор: DDX 14.2.2006, 16:59
блин, Sexton высказал самый нормальный вариант:
хранишь поля :
ид, название национальности, пол
1,русский,м
2, русская, ж

делаешь запрос источником данных для лукапдбкомбобокса
а када при вводе выбираешь пол, фильтруешь источник данных бокса в зависимости от пола

Цитата

А можно как нибудь присвоить ячейке грида DBLoockUpComboBox...

EhLib тебе в руки

Автор: McDevil 14.2.2006, 23:31
Спасибо конечно всем, но все, что вы говорите у меня впринципе уже реализованно...
Просто получается я нормально объяснить не могу...
Попытка number три:
- у меня есть таблица-справочник под названием SprNation с полями kodNat, nationMen, nationWomen...
- на имаге видно, что в Grid'e присутствует два поля с одинаковым названием "Национальность", в которых соответственно варианты написания национальности для женского и мужитского пола. Поля - эти лукаповские и из списка - соответственно...
ЗАДАЧА: чтобы при выборе пола оставалось корректное(нужное по логике) поле "национальность", для выбранного значения в поле "пол", и при этом выбранные ранее поля "пол" и "национальность" для других сотрудников не изменялись... т.е. что не было такого типа выбираешь пол мужской и все поля "национальность" для записей женского рода также становились мужского пола...
Заранее спасибо, тем кого я еще не вывел из себя окончательно и тем кто нашел в себе силы ответить... smile

Автор: Foley 15.2.2006, 00:10
Все понятно... занчит как я и говорил... что б вгриде отображалось одно поле
Цитата(Foley @ 12.2.2006, 23:53 Найти цитируемый пост)
чтоб поле становилось невидимым если неудовлетворяет значению...
, и другие записи не менялись...
В ГРИДЕ не пробовал делать Columns и потом присваивать Visible True и False... хотя с трудом представляю себе код...
хотя есть компонента ГРИДА с ROW и COL:
вот процедурка(в смысле код):

unit VUBComps;

interface

uses

SysUtils, WinTypes, WinProcs, Messages, Classes, Graphics, Controls,
Forms, Dialogs, Grids, DBGrids, DB, Menus;

type

TDBGridVUB = class(TDBGrid)
private
{ Private declarations }
protected
{ Protected declarations }
public
property Canvas;
function CellRect(ACol, ARow: Longint): TRect;
property Col;
property Row;

procedure Register;

implementation

procedure Register;
begin

RegisterComponents('VUBudget', [TDBGridVUB]);
end;

function TDBGridVUB.CellRect(ACol, ARow: Longint): TRect;
begin

Result := inherited CellRect(ACol, ARow);
end;

end.

может придумаешь что с этим можно сделать...
Добавлено @ 00:16
ты там еще говорил про добавление LookupComboBox в грид...
не знаю как это но просто ComboBox можно вставить так:
1. Дважды щелкнуть на DBGrid
2. Добавить колонку
3. Указать поле которое будет показываться (свойство FieldName)
4. Заполнить список (свойство PickList)

Автор: McDevil 15.2.2006, 01:22
Foley, спасибо, но не то...

Автор: DDX 15.2.2006, 15:33
McDevil,
специально для тебя набросал небольшой пример, прислать не пришлю, чтобы не заморачиваться с базами, но суть вкратце такова:
берешь dbEhGrid из комплекта EhLib
в запрос-источник данных основной сетки добавляешь новое поле, указываешь, что оно-лукап, и в качестве источника данных делаешь запрос к таблице-справочнику национальностей
в dataSource основного источника данных вешаешь событие AfterScroll, то бишь переход по записи, и в этом событии вешаешь фильтр по полю "пол" основного запроса и применяешь его
вуаля! при переходе на очередную строку в списке национальностей будут вываливаться лишь отфильтрованные по признаку пола данного чувака, при этом остальные записи отображают то значение, которое в них было сохранено, вне зависимости от пола!

заморочки с добавлением/удалением записи и изменение фильтра при этом вполне решаемы, фильтрами можно управлять гибко, в общем, флаг тебе в руки.


Автор: McDevil 23.2.2006, 14:54
DDX, не пойдет ЦП жрет слишком много, при перемещении по записям, может конечно что-то не так делаю в общшм не фарт... smile smile smile smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)