PDA

View Full Version : سوال: ایجاد لیست اسامی در edit



soft-c
شنبه 05 شهریور 1390, 14:36 عصر
نمی دونم چطوری این مطلب را سرچ کنم برای همین اینجا مطرح می کنم :
برنامه به دیتا بیس وصل است و جدولی که حاوی اسامی و فامیل آنها است در جدول موجود است .
می خواهم وقتی در یک edit وقتی یک اسم و فامیل را وارد می کنم همینطور که کاربر کلمه به کلمه اسم و فامیل را وارد می کند اسم ها و فامیل های موجود در دیتا بیس بر آن اساس فیلتر شود و اطلاعات موجود به صورت یک لیست در زیر edit نمایش داده شود .

BORHAN TEC
شنبه 05 شهریور 1390, 15:11 عصر
می تونید از TClientDataSet به شکل زیر استفاده کنید(در رویداد OnChange یک شیء از نوع TEdit):
procedure TForm3.edtSearchChange(Sender: TObject);
begin
ClientDataSet1.Filtered := False;
if cboSearchBy.Text = 'PN' then
ClientDataSet1.Filter := 'F_PN LIKE ''%' + edtSearch.Text + '%''';

if cboSearchBy.Text = 'Model' then
ClientDataSet1.Filter := 'F_MODEL LIKE ''%' + edtSearch.Text + '%''';

if cboSearchBy.Text = 'Series' then
ClientDataSet1.Filter := 'F_SERIES LIKE ''%' + edtSearch.Text + '%'''; ;

if cboSearchBy.Text = 'Full Info' then
ClientDataSet1.Filter := 'F_FULLINFO LIKE ''%' + edtSearch.Text + '%'''; ;

ClientDataSet1.Filtered := True;
end;
البته ClientDataSet تنظیمات دیگری هم در رابطه با فیلتر کردن دارد به عنوان مثال به حروف کوچک و بزرگ حساس باشد و ... .

مهران رسا
شنبه 05 شهریور 1390, 15:24 عصر
میتونید برای اینکار از یک ComboBox استفاده کنید. و به صورت زیر عمل کنید :

1- یک شی رشته ای یا یک آرایه تعریف کنید.
2 - با وارد شدن اولین حرف در Combo ، کلیه اسامی که با اون حرف شروع میشن توی لیستی که ساختین (در حافظه) و در کنترل ComboBox بارگزاری بشن.
3 - با وارد شدن حرف اول به بعد ، جستجو در لیست رشته ای انجام بشه و Item مربوطه در Combo انتخاب بشه . ضمناً این لیست تا پایان برنامه مقادیرش رو در حافظه حفظ کنه که نیاز به بارگزاری مجدد از دیتابیس نباشه.

soft-c
شنبه 05 شهریور 1390, 16:05 عصر
البته من می خواهم همینطور که کلمات را وارد می کنه اسامی در زیر edit نمایش داده بشه . مثل وقتی که در سایتی ثبت نام می کنید و هنگامی که اولین حرف ایمیل را وارد می کنید ایمیل هایی که با اون حرف قبلا وارد شده اند را نمایش می دهد .
یا شبیه جستجوی گوگل که کار تکمیل و نشان دادن اطلاعات مشابه را به طور خود کار انجام می دهد .
تشکر

soft-c
شنبه 05 شهریور 1390, 16:10 عصر
می تونید از TClientDataSet به شکل زیر استفاده کنید(در رویداد OnChange یک شیء از نوع TEdit):
procedure TForm3.edtSearchChange(Sender: TObject);
begin
ClientDataSet1.Filtered := False;
if cboSearchBy.Text = 'PN' then
ClientDataSet1.Filter := 'F_PN LIKE ''%' + edtSearch.Text + '%''';

if cboSearchBy.Text = 'Model' then
ClientDataSet1.Filter := 'F_MODEL LIKE ''%' + edtSearch.Text + '%''';

if cboSearchBy.Text = 'Series' then
ClientDataSet1.Filter := 'F_SERIES LIKE ''%' + edtSearch.Text + '%'''; ;

if cboSearchBy.Text = 'Full Info' then
ClientDataSet1.Filter := 'F_FULLINFO LIKE ''%' + edtSearch.Text + '%'''; ;

ClientDataSet1.Filtered := True;
end;
البته ClientDataSet تنظیمات دیگری هم در رابطه با فیلتر کردن دارد به عنوان مثال به حروف کوچک و بزرگ حساس باشد و ... .
میشه بیشتر توضیح بدید .
cbosearch چیه؟
تشکر

soft-c
شنبه 05 شهریور 1390, 16:11 عصر
میتونید برای اینکار از یک ComboBox استفاده کنید. و به صورت زیر عمل کنید :

1- یک شی رشته ای یا یک آرایه تعریف کنید.
2 - با وارد شدن اولین حرف در Combo ، کلیه اسامی که با اون حرف شروع میشن توی لیستی که ساختین (در حافظه) و در کنترل ComboBox بارگزاری بشن.
3 - با وارد شدن حرف اول به بعد ، جستجو در لیست رشته ای انجام بشه و Item مربوطه در Combo انتخاب بشه . ضمناً این لیست تا پایان برنامه مقادیرش رو در حافظه حفظ کنه که نیاز به بارگزاری مجدد از دیتابیس نباشه.
یعنی این یک کار اضافی نیست ؟که در یک لیستی وارد کنم و بعد از آن لیست جستجو را انجام بدم
تشکر

BORHAN TEC
شنبه 05 شهریور 1390, 18:14 عصر
cbosearch چیه؟
cboSearch فقط یک ComboBox هست که در آن چند آیتم رو درج کرده ام. همین!

soft-c
یک شنبه 06 شهریور 1390, 00:24 صبح
cboSearch فقط یک ComboBox هست که در آن چند آیتم رو درج کرده ام. همین!
ولی من همانطوری که در تاپیک 4 گفتم می خوام مثل جستجو در گوگل که وقتی یک کلمه را وارد می کنیم شروع به فیلتر کردن میکنه باشه . آیا این روش شما جوابگو هست ؟
در ضمن اطلاعات هم از دیتا بیس گرفته میشه .
تشکر

h4sh3m
یک شنبه 06 شهریور 1390, 00:49 صبح
اين كامبو جواب ميده ديگه !
حالا اضافه كاري باشه يا نباشه راه حل فعلا اينه ! اضافه كاري هم نيست ها بلكه شما با اين كار اسامي رو اول فيلتر ميكنيد و اگه تو وسط كار اسمي كه مي خوايين رو تو ليست ديدن با كليك انتخاب ميكنيد و نيازي به تايپ بقيه اون اسم نيست !

soft-c
یک شنبه 06 شهریور 1390, 01:07 صبح
اين كامبو جواب ميده ديگه !
حالا اضافه كاري باشه يا نباشه راه حل فعلا اينه ! اضافه كاري هم نيست ها بلكه شما با اين كار اسامي رو اول فيلتر ميكنيد و اگه تو وسط كار اسمي كه مي خوايين رو تو ليست ديدن با كليك انتخاب ميكنيد و نيازي به تايپ بقيه اون اسم نيست !
یعنی امکانی که بشه از edit مانند جستجوی گوگل استفاده کرد نیست ؟
تشکر

h4sh3m
یک شنبه 06 شهریور 1390, 02:56 صبح
فكر نميكنم همچين چيزي بشه مگه اينكه يه كنترل تركيبي درست كني !!!!
حالا گوگل هم اول جستجو ميكنه و نشون ميده و شما از توي جستجوي اون باز جستجو ميكنيد !

عقاب سیاه
چهارشنبه 09 شهریور 1390, 13:48 عصر
میتونید برای اینکار از یک ComboBox استفاده کنید. و به صورت زیر عمل کنید :

1- یک شی رشته ای یا یک آرایه تعریف کنید.
2 - با وارد شدن اولین حرف در Combo ، کلیه اسامی که با اون حرف شروع میشن توی لیستی که ساختین (در حافظه) و در کنترل ComboBox بارگزاری بشن.
3 - با وارد شدن حرف اول به بعد ، جستجو در لیست رشته ای انجام بشه و Item مربوطه در Combo انتخاب بشه . ضمناً این لیست تا پایان برنامه مقادیرش رو در حافظه حفظ کنه که نیاز به بارگزاری مجدد از دیتابیس نباشه.

من هم از همین روش استفاده می کنم!
یعنی مقادیری که توی combo نوشته می شه را اگه توش قبلا نباشه اول توی ایم هاش اد می کنم بعد کل مهتویاتش را توی دیتابیس ذخیره می کنم و بعد موقع باز شدن فرم دوباره فراخانی ایتم ها و نسبت دادن اون با combo

BORHAN TEC
چهارشنبه 09 شهریور 1390, 19:33 عصر
ولی من همانطوری که در تاپیک 4 گفتم می خوام مثل جستجو در گوگل که وقتی یک کلمه را وارد می کنیم شروع به فیلتر کردن میکنه باشه . آیا این روش شما جوابگو هست ؟
البته که جوابگو هست. اون کمبو باک هم بی خیال شوید. اون کدی که قرار داده بودم بخشی از یک برنامه ای بود که در حال نوشتن اون بودم و در جواب به شما کپی اش کردم.

فكر نميكنم همچين چيزي بشه مگه اينكه يه كنترل تركيبي درست كني !!!!
نیازی به این کار نیست. این روشی که دوستمان گفتند به راحتی با کنترل های پیش فرض دلفی قابل انجام است. برای کسب اطلاعات بیشتر در این رابطه در مورد فیلتر کردن اطلاعات تحقیق کنید. در اون کدی هم که من قرار دادم اون کمبو باکس مشخص می کنه که فیلتر کردن بر اساس کدوم فیلد می خواهد انجام بشود. من در اون برنامه برای انجام کار هایم از تکنولوژی dbExpress استفاده کرده ام و همچنین از یک شی از نوع TClientDataSet استفاده کرده ام که یکی از کاربردهایش توانایی فیلتر کردن داده ها است که در پالت کامپوننت های دلفی یافت می شود.