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 داشته باشد.
دوست عزیز این سوال به این تاپیک مربوط نمیشه و باید در یک تاپیک جداگانه مطرح بشه
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.