PDA

View Full Version : DBGRID و فیلتر کردن بر اساس تمام فیلدها



mojtaba_z
یک شنبه 31 تیر 1386, 16:56 عصر
سلام

برای اینکه در DBGRID بتونیم روی تمام فیلد ها عمل فیلتر رو انجام بدیم چه راههایی وجود داره ؟
میخوام ببینم آیا به بالای تمام ستون های DBGRID میشه Edit هایی اضافه کرد و وقتی درون آنها چیزی نوشته میشه DBGRID براساس آنها فیلتر بشه ؟
من برای این کار اول DBGRID رو روی فرم میزاشتم ، بعد فیلدهای مورد نییاز رو توی اون ADD میکردم ، بعد فاصله ستونها رو دستی تنظیم میکردم ، بعد به تعداد ستون ها کامپوننت Edit بالای هرکدوم قرار میدادم ، بعد Edit هارو تنظیم میکرو تا دقیقا بالای هر ستون باشن ، در نهایت برای Edit ها تعریف میکردم که DBGRID رو بر اساس متن نوشته شده در Edit ها بصورت ترکیب Edit ها فیلتر بکنه .
حالا وقتی فیلد ها اضافه میشن یاتغییر پیدا میکنن همه چیز بهم میریزه . آیا راهی وجود داره ؟
از کامپوننت EhLib استفاده کردم ولی برای فیلتر در بالای ستونها چیزی نداشت !

saeed_d
یک شنبه 31 تیر 1386, 17:31 عصر
چه چیز بهم میریزه. لطفا بیشتر توضیح بدین. اگه میشه کدی که برای فیلتر نوشتین رو هم بزارین

SYNDROME
یک شنبه 31 تیر 1386, 17:41 عصر
با سلام
یک تابع بنویس و در OnChangeهمه Editها فراخوانی که و در تابع فوق مقدار هر Editرا چک کن اگر پر بود فیلتر را بر روی آن اعمال کن و اگر نبود اعمال نکن.
مثال:


SQL := '';
Falge := False;
IF Edit1.Text <> '' Then
Begin
SQL := 'Filed1 = '''+ Edit1.Text +'''';
Flag := True;
End
IF Edit2.Text <> '' Then
Begin
IF Flag Then SQL := SQL + ' And ';
SQL := SQL + 'Filed2 = '''+ Edit2.Text +'''';
Flag := True;
End;
ADO.Filtered := False;
ADO.Filter := SQL;
IF SQL <> '' Then
ADO.Filtered := True;

SQL : یک متغییر از نوغ رشته برای نگهداری شرطها.
Flag : متغییر Booleanبرای اینکه بدانیم قبل از این شرط ، شرط دیگری بوده تا 'And' را اضافه کنیم.
البته این فقط یک مثال بود که در یک دقیقه نوشتم.
موفق باشی

mojtaba_z
دوشنبه 01 مرداد 1386, 07:20 صبح
سلام

من با نوشتن کد برای شرط ها مشکلی ندارم. میخوام بالای تمام ستون های DBGRID یک Edit بزارم یا اینکه کامپوننتی رو معرفی کنید که در بالای ستونهاش بطور اتوماتیک محلی برای نوشتن باشه تا براساس آن فیلتر کنه

Batman
دوشنبه 01 مرداد 1386, 07:24 صبح
فکر نکنم بشه شاید تنها راهی که وجود داره اینه که در رویداد ontitleclick خود dbgrid کد بنویسی که اون هم یه جورایی ثابته و بدرد کاره شما نمیخوره

SYNDROME
دوشنبه 01 مرداد 1386, 07:32 صبح
با سلام

سلام
من با نوشتن کد برای شرط ها مشکلی ندارم. میخوام بالای تمام ستون های DBGRID یک Edit بزارم یا اینکه کامپوننتی رو معرفی کنید که در بالای ستونهاش بطور اتوماتیک محلی برای نوشتن باشه تا براساس آن فیلتر کنه
چنین کامپونتی وجود دارد.
ولی پولی است.من یک نمونه اش را دیدم.
موفق با شید

mojtaba_z
دوشنبه 01 مرداد 1386, 07:38 صبح
اسم کامپوننت چیه . یا آدرس سایتش .
راستی شما اگه بخواهید براساس تمام فیلد های درون DBGRID اون رو فیلتر کنید چیکار میکنید ؟ (منظورم نوشتن کد نیست نوع عملکرد و استفاده از کامپوننت ها رو میگم)

Batman
دوشنبه 01 مرداد 1386, 13:37 عصر
اگه تعداد فیلدهات ثابت هستش و کم و زیاد نمیشه میتونی یه دونه edit بذاری و کاربر روی هر کدوم از ستونها که کلیک کرد مختصات edit عوض بشه
کلک رشتیه

mojtaba_z
دوشنبه 01 مرداد 1386, 14:06 عصر
برای تعداد ستونهای محدود همین کار رو میکردم . ولی اگه تعداد ستونها زیاد باشه یا مشخص نباشه چکار باید کرد ؟

SYNDROME
دوشنبه 01 مرداد 1386, 18:34 عصر
با سلام

اسم کامپوننت چیه . یا آدرس سایتش .
راستی شما اگه بخواهید براساس تمام فیلد های درون DBGRID اون رو فیلتر کنید چیکار میکنید ؟ (منظورم نوشتن کد نیست نوع عملکرد و استفاده از کامپوننت ها رو میگم)
روشی که در بالا گفته شد(Edit)بهترین روش است.
موفق باشی

mojtaba_z
سه شنبه 02 مرداد 1386, 07:55 صبح
سلام
SYNDROME عزیز ، فکر کنم منظورم رو اصلا نگرفتی!!
چون من گفتم که :

من با نوشتن کد برای شرط ها مشکلی ندارم. میخوام بالای تمام ستون های DBGRID یک Edit بزارم

و شما میگید که :

یک تابع بنویس و در OnChangeهمه Editها فراخوانی که

همونطوری که در چند مطلب قبلی گفتم ، مشکل اینه که نمیدونم تعدادستونهای DBGRID چندتا هستش یا اینکه ممکنه کم نباشه .

mojtaba_z
چهارشنبه 03 مرداد 1386, 15:15 عصر
توی title های مربوط به DBGRID میشه TEdit قرار داد یا نه ؟

علامت سوال
چهارشنبه 03 مرداد 1386, 15:21 عصر
Ehlib این امکان رو داره دقیق تر دنبالش بگرد

mojtaba_z
یک شنبه 07 مرداد 1386, 16:17 عصر
گزینه های EhLib رو دیدم ، چیزی در این مورد پیدا نکردم. حتی Demo های اون رو اجرا کردم ولی چیزی نیافتم !

mojtaba_z
سه شنبه 09 مرداد 1386, 13:31 عصر
هیچ کسی نمیدونه چیکار باید کرد ؟؟
شما توی فیلتر کردن به این صورت از چه چیزی استفاده میکنید ؟

SYNDROME
سه شنبه 09 مرداد 1386, 15:24 عصر
با سلام


همونطوری که در چند مطلب قبلی گفتم ، مشکل اینه که نمیدونم تعدادستونهای DBGRID چندتا هستش یا اینکه ممکنه کم نباشه .

تعداد ستونها را که می توانی به دست باوری.


DBGrid1.Columns.Count

حالا به تعداد columnها Editبساز و در بالای همه ستونها بزار.
حالا شاید بگویی که ممکن است تعداد ستونها زیاد باشد و از فرم بیرون بزند؟
یک ScrollBox در صفحه قرار بده و DBGrid را در آن گذاشته و طول DBGridرا با وجه به گهنای ستونها آنقدر زیاد کن که دیگر DBGridدارای Scroll افقی نباشد و حالا اگر Editها را در ScrollBoxقرار دهید با ScrollBoxهای آنها را جابجا کنید.
موفق باشید

mojtaba_z
شنبه 13 مرداد 1386, 16:05 عصر
سلام
فقط میخوام به Title های DBGrid یک TEdit اضافه کنم . یعنی بالای هر ستون در قسمت Title اون یک TEdit هم باشه ؟
چطوری که توی ستون های DBGrid میشه ComboBox و CheckBox و Image قرار داد ، ولی توی Titleها نمیشه ؟؟؟

saeed_rezaee
شنبه 13 مرداد 1386, 20:53 عصر
سلام.
DevExpress QuantumGrid رو نگاهی بندازید

evinsoftwaregp
پنج شنبه 18 مرداد 1386, 05:48 صبح
از ehlib استفاده کن

Valadi
پنج شنبه 18 مرداد 1386, 07:15 صبح
این کامپونت ها در مجموعه آقای آحدی هست
DevExpress QuantumGrid