PDA

View Full Version : فیلتر در DBGrid



master13111
شنبه 06 خرداد 1385, 11:20 صبح
dbgride ای را در نظر بگیرید که یک فیلد نام دارد و آن فیلد شامل دو اسم "ناصر" ،‌ 5 اسم " محسن" و 4 اسم " حمزه " باشه. می خوام با کلیک روی اسم فیلد dbgrid (‌ رکورد fixed) یه لیست باز بشه که شامل اسمهای موجود در فیلد باشه ولی به صورت group یعنی شامل سه اسم ناصر و محسن و حمزه باشه . و بعد با انتخاب هر اسم dbgrid بر اون اساس فیلتر بشه. امکانش هست؟

m-khorsandi
شنبه 06 خرداد 1385, 16:55 عصر
شما میتونی از یک ADOQuery استفاده کنی و query زیر رو براش بنویسی:


Select FName From PersInfo
Group By FName


اینطوری لیست تمام اسامی رو داری بدون تکراری. حالا میتونی از DBGrid و فرم مجزا استفاده
کنی و DBGrid رو به ADOQuery مربوطه وصل کنی که با انتخاب یکی از رکوردها (روش انتخاب
با خودت) فرم بسته شه و "نام" انتخاب شده در خاصیت Filter اون DataSetیی که میبایست
فیلتر بشه قرار بگیره، تقریبا شبیه به کد زیر:


ADOTable1.Filter := 'FName=' + QuotedStr(Form2.ADOQuery1.FieldByName('FName).AsSt ring;
ADOTable1.Filtered := True;

master13111
یک شنبه 07 خرداد 1385, 07:32 صبح
ممنون از راهنماییتون. منظورم چیزی شبیه اکسس و اکسله که define record یا fixed record وقتی روش کلیک میشه ( در حالت فیلتر) محتویات اون ستون به صورت گروه بندی ( بدون داده تکراری ) لیست میشه و بعد از انتخاب بر اساس داده منتخب لیست میشه . عدم کارایی مثال بالا وقتی نمود بیشتری پیدا می کنه که شما فیلدهای زیادی دارید و نمی دونید که اپراتور ممکنه کدوم ستونها رو همزمان فیلتر کنه.

m-khorsandi
یک شنبه 07 خرداد 1385, 14:07 عصر
توضیحات بالا با توضیحات پائین متفاوته،
مواردی که نوشتم مشکلتون رو حل میکنه.


عدم کارایی مثال بالا وقتی نمود بیشتری پیدا می کنه که شما فیلدهای زیادی دارید و نمی دونید که اپراتور ممکنه کدوم ستونها رو همزمان فیلتر کنه.

در این مورد هم میتونید از Dynamic T-SQL یا ADOQuery استفاده کنید.

ghabil
یک شنبه 07 خرداد 1385, 21:57 عصر
دستوری که برای این کار هست Select Distinct هستش ، هرچند که اگر از Group by هم استفاده کنید چون خود SQL Server کد رو Optimize میکنه نهایتا Exec Plan ها یک شکل میشند.

حالا از ExecPlan نوشتن بگذریم ، چیزی که تو میخوای رو باید با یک Query جدا و مثلا یک کمبوباکس بالای گرید پیاده سازی کنی حتی قشنگترش اینه که یک فرم رو مدال باز کنی روی صفحه .

farideh_en
شنبه 20 خرداد 1385, 15:22 عصر
سلام
می خواستم بدونم میشه بدون استفاده از dbedit یا edit اطلاعات رو از داخل dbgrid وارد نمود یعنی dbgrid علاوه بر رکوردای موجود در جدول ، تعدادی سطر خالی جهت درج اطلاعات جدید به طور مستقیم از dbgrid داشته باشد.

mzjahromi
شنبه 20 خرداد 1385, 15:28 عصر
سلام
می خواستم بدونم میشه بدون استفاده از dbedit یا edit اطلاعات رو از داخل dbgrid وارد نمود یعنی dbgrid علاوه بر رکوردای موجود در جدول ، تعدادی سطر خالی جهت درج اطلاعات جدید به طور مستقیم از dbgrid داشته باشد.
دوست عزیز این سوال به این تاپیک مربوط نمیشه و باید در یک تاپیک جداگانه مطرح بشه