ورود

View Full Version : گذاشتن ComboBox در يكي از سلولهاي DBGrid



بهمن بهار
سه شنبه 07 خرداد 1387, 12:49 عصر
با سلام
من ميخواهم به جاي يكي از سلولهاي DBGrid يك ComboBox باز شود يعني وقتي كاربر وارد آن سلول ميشود مقدار ComboBox.text برابر مقدار فيلد شود . البته با ComboBox.Create

البته توضيح دهم كه من ميخواهم حتما ComboBox را در داخل رويداد ColEnter ايجاد كنم
ضمن اينكه از PickListا هم نميتوانم استفاده كنم. فقط و فقط بايد در داخل رويداد ذكر شده (در صورت امكان و يا در رويداد ديگري از DBgrid) ايجاد شود.
در ضمن از Ehlib و ... هم نبايد استفاده بشه .
آيا امكان دارد؟
كلي تر بخواهم بگم ميخواهيم يك شئي ويژوال را داخل يكي از سلولهاي گريد بندازيم.(فقط با .Create)

با عرض پوزش جستجو كار نميكرد.

با تشكر

amin_alexi
سه شنبه 07 خرداد 1387, 13:10 عصر
سلام
من این کار رو توی StringGrid انجام دادم ...
خوب توی رویداد OnKeyPress بررس میکنم که اگه مثلا Space زده شد ... در سطر و ستون جاری یک Combobox نشون بده یا ایجاد می کنم ... و Text رو هم برابر متن Grid میزارم
همین کارو واسه DbGrid بکن و Text رو برابر Field مورد نظر در Record جاری قرار بده !

بهمن بهار
سه شنبه 07 خرداد 1387, 13:37 عصر
از پاسختان متشكرم
البته توضيح دهم كه من ميخواهم حتما ComboBox را در داخل رويداد ColEnter ايجاد كنم
ضمن اينكه از PickListا هم نميتوانم استفاده كنم. فقط و فقط بايد دراخل رويداد ذكر شده ايجاد شود.
آيا امكان دارد؟
با تشكر مجدد

amin_alexi
سه شنبه 07 خرداد 1387, 14:11 عصر
احتمالا باید بشه !
ولی رویداد ColExit رو هم باید واسش کد بنویسی !
تو کدت رو بنویس اگه مشکل داشتی اینجا بزار شاید تونستیم کمکتون کنیم

بهمن بهار
سه شنبه 07 خرداد 1387, 15:36 عصر
اين كد را نوشتم اما خطا ميگيرد و كار نمي كند


procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
Var
Tcombo:TComboBox;
begin
if (gdFocused in State) then
begin
if (Column.Field.FieldName = 'serial') then
Try
Tcombo.Parent := DBGrid1;
Tcombo := TComboBox.Create(Self);
Tcombo.Text := Column.Field.Value;
Tcombo.Visible := True;
Tcombo.SetFocus
finally
Tcombo.Free;
end;

end;

end;

SYNDROME
سه شنبه 07 خرداد 1387, 21:23 عصر
بر روی ستون مورد نظر در DBGrid کلیک کنید و سپس داخل خاصیت PickList ان مقادیر خورد را وارد کنید .
حالا هر وقت وارد یکی از سلولهای ستون مورد نظر وارد شوید Combobox نمایش داده می شود.
موفق باشید

بهمن بهار
چهارشنبه 08 خرداد 1387, 14:31 عصر
بر روی ستون مورد نظر در DBGrid کلیک کنید و سپس داخل خاصیت PickList ان مقادیر خورد را وارد کنید .
حالا هر وقت وارد یکی از سلولهای ستون مورد نظر وارد شوید Combobox نمایش داده می شود.
موفق باشید


عرض كردم كه بدون PickList و Ehlib , ...
ممنون

taha
چهارشنبه 08 خرداد 1387, 17:26 عصر
سلام



private
{ Private declarations }
ACombo: TComboBox;
...

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
begin
if (gdSelected in State) then
begin
if (UpperCase(Column.Field.FieldName) = UpperCase('serial')) then
begin
ACombo.Top:= Rect.Top;
ACombo.Left:= Rect.Left;
ACombo.Width:= Rect.Right - Rect.Left;
ACombo.Text := Column.Field.Value;
ACombo.Visible := True;
ACombo.SetFocus
end;
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
ACombo:= TComboBox.Create(Self);
ACombo.Parent := DBGrid1;
ACombo.Visible:= False;
end;

SYNDROME
چهارشنبه 08 خرداد 1387, 17:31 عصر
عرض كردم كه بدون PickList و Ehlib , ...
ممنون
برای چه نمی خواهید از این روش استفاده کنید؟
آیا مشکلی را برای شما ایجاد می کند؟
موفق باشید

Cave_Man
چهارشنبه 08 خرداد 1387, 17:41 عصر
روش taha خیلی عالیه من هم همین رو پیشنهاد میکنم.

بهمن بهار
پنج شنبه 09 خرداد 1387, 07:32 صبح
با سلام
در روش Taha در واقع يك Combo در سلول نقاشي ميشود ولي بايد حتما ايجاد شود . حالا چرا ؟
اول آنكه من در واقع كامپوننتي كه از ComboBox وراثت گرفته درست كرده ام كه مشخصات خاصي دارد و بايد آنرا در سلول گريد بگذارم.
دوم آنكه مدير عامل ميخواهد حتما يك Object Orented باشد و حتما حتما داخل سلول ايجاد شود نه نقاشي و ...

ممنونم

taha
پنج شنبه 09 خرداد 1387, 10:34 صبح
من ميخواهم به جاي يكي از سلولهاي DBGrid يك ComboBox باز شود يعني وقتي كاربر وارد آن سلول ميشود مقدار ComboBox.text برابر مقدار فيلد شود . البته با ComboBox.Create

البته توضيح دهم كه من ميخواهم حتما ComboBox را در داخل رويداد ColEnter ايجاد كنم
كلي تر بخواهم بگم ميخواهيم يك شئي ويژوال را داخل يكي از سلولهاي گريد بندازيم.(فقط با .Create)

اين كد را نوشتم اما خطا ميگيرد و كار نمي كند

procedure TForm1.DBGrid1DrawColumnCell(Sender: TObject; const Rect: TRect;
DataCol: Integer; Column: TColumn; State: TGridDrawState);
Var
Tcombo:TComboBox;
begin
if (gdFocused in State) then
begin
if (Column.Field.FieldName = 'serial') then
Try
Tcombo.Parent := DBGrid1;
Tcombo := TComboBox.Create(Self);
Tcombo.Text := Column.Field.Value;
Tcombo.Visible := True;
Tcombo.SetFocus
finally
Tcombo.Free;
end;

end;

end;
اول آنكه من در واقع كامپوننتي كه از ComboBox وراثت گرفته درست كرده ام كه مشخصات خاصي دارد و بايد آنرا در سلول گريد بگذارم.
دوم آنكه مدير عامل ميخواهد حتما يك Object Orented باشد و حتما حتما داخل سلول ايجاد شود نه نقاشي و ... دوست عزیز!
نگاهی بکن به پست هایی که کردی. چیزهایی که بر خلاف خواسته وسوال شما مشهودند:
1- گنگ و مبهم بودن سوال
2- تغییر خواسته و سوال
3- اضافه شدن مفروضات و شرایط جدید
...

باید در سوال پرسیدن یادمون باشه:


دقیق بدونیم چی می خواهیم
یه کم فکر کنیم، اگه حل نشد ...
کلمات کلیدی خواستمون رو در بیاریم
با استفاده از کلمات کلیدی در سایت جستجو کنیم اگه پیدا نشد ...
عنوان درست برای سوالمون انتخاب کنیم
اینو بدونیم که دیگران توی ذهن و جلسات ما! نیستن که بدونن توش چی می گذره، چی می خواهیم و ...، و ما فقط با لغات هستش که اونا رو می تونیم مطلع و آگاه کنیم، پس ...
سوالمون رو دقیق و با تمام فرضیات و شرایط بیان کنیم و اگر نمونه کد، منبع و ... هم داریم بذاریم
اگه جواب گرفتیم فبه المراد، اگر نگرفتیم ...
بدونیم که دیگرانی که وقت میذارن و جواب (حتی جوابی که مدنظر ما نیست و یا غلط! ) میدن، به ما دارن لطف می کنند و هیچ بایدی و وظیفه ای در جواب دادنشون نیست.




پی نوشت!
1- اینایی که اون بالا گفتم همشو به خودت برندوری، چون یه سریش کاملا مطالب کلی برای همه ماست.
2- ایضاً اینایی که اون بالا گفتم همشو رو هم به من! برندوری، چون من خیلی بیسوات تر از اونم که ...

بهمن بهار
پنج شنبه 09 خرداد 1387, 11:36 صبح
شما ببخشيد
ذكات علم به آموختنش است
يا حق

بهمن بهار
یک شنبه 19 خرداد 1387, 10:57 صبح
با سلان
لطفا دوستان مساعدت كرده اينجانب را راهنمايي كنند. آيا اصلا امكان پذير است ؟

بهمن بهار
چهارشنبه 22 خرداد 1387, 14:27 عصر
فهميدم
نمي شه !!!!!!!!!!!.

pandco
پنج شنبه 23 خرداد 1387, 09:29 صبح
با سلام خدمت دوستان گرامي
من با اين فايلي كه در ضميمه گذاشته ام كار كردم و به خوبي جواب مي دهد.
با تشكر
--------------------------------------------------------------------------------------------
به جاي اينكه سعي كنيد جاي كسي را بگيريد ، تلاش كنيد جاي واقعي خود را بيابيد.

mrm0101
جمعه 24 خرداد 1387, 01:24 صبح
سلام . چرا وقتی کامپونت های آماده است خودتون رو درگیر کد نویسی می کنید که باعث افزایش خطا و درد سر برنامه بشه .
کامپونت Ehlib Full Version 3.4 نیاز شما رو رفع می کنه
توی سایت در این زمینه جستو کنید