PDA

View Full Version : سوال: مرتب کردن عناصر دی بی گرید



farhadkarimi
جمعه 17 شهریور 1391, 10:49 صبح
با سلام
دوستان عزیز من یک مشکل تو برنامه ای که دارم می نویسم دارم و اون اینکه می خواهم عناصر فیلد جدول دی بی گرید را با تایپ هر حرف داخل رویداد وان چنج عنصر ایدت مرتب کنم (فیلتر کنم) اگر ممکنه بصورت ساده مرا راهنمایی کنید خیلی گیرم ممنون می شم

BORHAN TEC
جمعه 17 شهریور 1391, 11:24 صبح
اگر از ado استفاده می کنید می توانید از کدی مثل زیر استفاده کنید:
TblTrans_temp.Filter := 'ID_ITEM = ' + QuotedStr(edtNoMeja.Text+'*');
منبع:
http://stackoverflow.com/questions/1258516/filtering-data-on-dbgrid-on-dbedit-keypress
در هر صورت توجه داشته باشید که استفاده مستقیم از کد بالا در رویداد OnChange اصلاً کار درستی نیست و فشار زیادی را روی پایگاه داده می آورد(چون با هر تغییری در محتوای Edit این فیلتر اعمال می شود). من توصیه می کنم که از یک تایمر برای این کار استفاده کنید. مثل این:
procedure TMainForm.Edit1Change(Sender: TObject);
begin
Timer1.Enabled := False;
Timer1.Enabled := True;
end;

procedure TMainForm.Timer1Timer(Sender: TObject);
begin
TblTrans_temp.Filter := 'ID_ITEM = ' + QuotedStr(edtNoMeja.Text+'*');
end;
حال خاصیت Interval مربوط به تایمر را هم می توانید طبق سلیقه خودتان تنظیم کنید ولی به نظر من مقدار 800 مناسب به نظر می رسد.
اگر هم می خواهید که فیلتر را بر روی کامپوننتی از نوع TClientDataSet اعمال کنید می توانید از خاصیت مشابهی که در این کامپوننت تعبیه شده است استفاده کنید.

YkA1363
جمعه 17 شهریور 1391, 12:18 عصر
نمونه برنامه اي كه خواستي بودي اينجا برات مي زارم اميدوارم مشكلت رو حل كنه.

farhadkarimi
جمعه 17 شهریور 1391, 16:34 عصر
اگر از ado استفاده می کنید می توانید از کدی مثل زیر استفاده کنید:
TblTrans_temp.Filter := 'ID_ITEM = ' + QuotedStr(edtNoMeja.Text+'*');
منبع:
http://stackoverflow.com/questions/1258516/filtering-data-on-dbgrid-on-dbedit-keypress
در هر صورت توجه داشته باشید که استفاده مستقیم از کد بالا در رویداد OnChange اصلاً کار درستی نیست و فشار زیادی را روی پایگاه داده می آورد(چون با هر تغییری در محتوای Edit این فیلتر اعمال می شود). من توصیه می کنم که از یک تایمر برای این کار استفاده کنید. مثل این:
procedure TMainForm.Edit1Change(Sender: TObject);
begin
Timer1.Enabled := False;
Timer1.Enabled := True;
end;

procedure TMainForm.Timer1Timer(Sender: TObject);
begin
TblTrans_temp.Filter := 'ID_ITEM = ' + QuotedStr(edtNoMeja.Text+'*');
end;
حال خاصیت Interval مربوط به تایمر را هم می توانید طبق سلیقه خودتان تنظیم کنید ولی به نظر من مقدار 800 مناسب به نظر می رسد.
اگر هم می خواهید که فیلتر را بر روی کامپوننتی از نوع TClientDataSet اعمال کنید می توانید از خاصیت مشابهی که در این کامپوننت تعبیه شده است استفاده کنید.

ممنون ولی من از ado استفاده نمی کنم وفقط یک بانک اطلاعاتی ساده دارم و میخوام از متدد filter خیلی ساده با زدن هر حرف داخل عنصر edit جدول فیلتر شود ممنون اگر کمکم کنید

farhadkarimi
جمعه 17 شهریور 1391, 16:36 عصر
نمونه برنامه اي كه خواستي بودي اينجا برات مي زارم اميدوارم مشكلت رو حل كنه.

خوبه ولی من می خوام حالت فیلتر داشته باشه نه سرچ اگر کمکم کنید ممنون می شم

BORHAN TEC
جمعه 17 شهریور 1391, 16:59 عصر
این کدی که من قرار دادم برای فیلتر کردن است و برای جستجو نیست. به عبارتی مثلاً اگر در Edit عبارت Ali را بنویسید عباراتی که در آنها کلمه Ali بکار رفته است لیست می شود.

YkA1363
جمعه 17 شهریور 1391, 18:01 عصر
خوبه ولی من می خوام حالت فیلتر داشته باشه نه سرچ اگر کمکم کنید ممنون می شم

نمونه ای که من برات گذاشتم دقیقا فیلتره.

mmeehhrraann
سه شنبه 24 تیر 1393, 09:48 صبح
نمونه ای که من برات گذاشتم دقیقا فیلتره.

اصلا نمونه کد شما کار نمیکنه