PDA

View Full Version : سوال: جستجوی ترکیبی



ma.rad
چهارشنبه 07 اردیبهشت 1390, 10:59 صبح
سلام
من قبلا هم این سوال رو پرسیدم ولی مشکلم حل نشد
میخوام براساس پارامتر یا پامتر هایی جستجو انجام بدم ولی چون تعداد پارامترها زیاد نمی خوام برا هرکدومشون یه StoredProcedure ایجاد کنم چه طور میشه یه جستجوی ترکیبی بنویسم

مثلا جستجو بر اساس: تحصیلات- شغل -جنسیت
من از sp و dataset استفاده کردم
لطفا راهنمایی کنید
نمونه فرم
http://barnamenevis.org/attachment.php?attachmentid=67935&d=1301210421

ma.rad
چهارشنبه 07 اردیبهشت 1390, 20:55 عصر
مرسی از این همه استقبال

Ehsan_seif
چهارشنبه 07 اردیبهشت 1390, 21:08 عصر
جناب ma.rad سوالت رو خیلی گنگ مطرح کردی
اگه لطف کنی مشکلت رو یه خورده بیشتر باز کنی شاید دوستان بتونن راهنماییت کنند

gerdioz
چهارشنبه 07 اردیبهشت 1390, 21:40 عصر
دوست عزیز اگه سوالتون رو درست متوجه شده باشم:
شما باید برای هر کدوم از انتخاب های کاربر یک کوئری بنویسید یا میتونید از فیلتر datawiev استفاده کنید
dataview1.filter="falily='"+text1.text+"'"

ma.rad
جمعه 09 اردیبهشت 1390, 21:16 عصر
من این جستجو رو تو StoredProcedure نوشتم ولی جواب نمی ده؟

select * from tebal1 where (Tahsil=@Tahsil or @Tahsil='') and (Job=@job or @Job='')and (Din=@din or @Din='') and (Mazhab=@mazhab or @Mazhab='') and (Dore=@dore or @Dore='') and (Khedmat=@khedmat or @Khedmat='') and (TypeMember=@TypeMember or @TypeMember='') and (Organ=@Organ or @Organ='') and (HTahsil=@HTahsil or @HTahsil='' ) and (Taahol=@Taahol or @Taahol='')

ma.rad
جمعه 09 اردیبهشت 1390, 21:48 عصر
من میخوام chech box مربوط به هر combo box تیک خورد بر اساس اونا جستجو کنه
لطفا راهنمایی کنید........

Felony
جمعه 09 اردیبهشت 1390, 21:53 عصر
باید با شرط TextBox رو بررسی کنیو اونهایی که متنی درشون وارد شده رو جدا کنید و رشته ای که حاوی کد TSQL برای فیلتر جدول هست رو خودتون بسازید و بعد فیلتر رو بر اساس اون انجام بدید ، قبلا در بخش دلفی همچین کدی برای یکی از کاربران نوشته بودم که میتونید ترجمش کنید :

http://barnamenevis.org/showthread.php?251057-%D8%AC%D8%B3%D8%AA%D8%AC%D9%88-%D8%A8%D8%B1-%D8%A7%D8%B3%D8%A7%D8%B3-%D9%87%D9%85%D9%87-%D9%81%DB%8C%D9%84%D8%AF-%D9%87%D8%A7&p=1117387&viewfull=1#post1117387

morteza271
جمعه 09 اردیبهشت 1390, 21:58 عصر
اگه درست متوجه شده باشم شما به این طریق میتونید کوئری رو بدست بیارید و کارتون رو انجام بدین:

string strFilter="1=1";
if(CheckBox1.Checked==true)
strFilter+=" and Job="+ComboBox1.Text;
if(CheckBox2.Checked==true)
strFilter+=" and Birth="+ComboBox2.Text;
موفق باشید

ma.rad
جمعه 09 اردیبهشت 1390, 22:55 عصر
من با فیلتر کار نکردم میشه بیشتر توضیح بدید
من از sp و dataset استفاده میکنم

aisana
شنبه 10 اردیبهشت 1390, 09:26 صبح
اگه هنوز مشکلت حل نشده ایمیل بزن کدشو بفرستم

morteza271
شنبه 10 اردیبهشت 1390, 09:38 صبح
اگه گریدتون رو به دیتاست بایند کردین اینطوری میشه:
با استفاده از همون کدی که نوشتم :


this.DataBindingSource.Filter = strFilter;
DataBindingSource همونی هست که به گریدتون بایند کردین.

ma.rad
شنبه 10 اردیبهشت 1390, 09:45 صبح
سلام مشکلم هنوز حل نشده
من تو sp این کدو نوشتم

CREATE PROCEDURE [dbo].[SearchSp]
( @WhereC Nvarchar(300))
AS
BEGIN
SET NOCOUNT ON;
Declare @Quer VarChar(1000)
SELECT @Quer = 'SELECT * FROM YoutTbl WHERE '+@WhereC
EXEC @Quer
END




و برای اجرا تو برنامه رشته برای تست اینطور نوشتم

string str="";
str += str.Length == 0 ? "name =" + textBox1.Text : " AND " + "family=" + textBox2.Text ;
ds1TableAdapters.QueriesTableAdapter da = new ds1TableAdapters.QueriesTableAdapter();
da.sp1(str);

ولی زمان اجرا میگه sp مورد نظر پیدا نمی کنه

ma.rad
شنبه 10 اردیبهشت 1390, 21:52 عصر
کسی میتونه راهنمایی کنه

morteza271
شنبه 10 اردیبهشت 1390, 22:23 عصر
ببین دوست عزیز به نظر من اصلا نیازی به SP ندارین.
شما بگین چطوری گریدتون رو پر می کنید؟کدش رو بذارین؟
تا بهتون بگم باید چیکار کنید.
منتظرم...

ma.rad
شنبه 10 اردیبهشت 1390, 22:32 عصر
سلام من data grid این طوری پر میکنم
ds1TableAdapters.StoredProcedure2TableAdapter da = new ds1TableAdapters.StoredProcedure2TableAdapter();
ds1.StoredProcedure2DataTable dt = new ds1.StoredProcedure2DataTable();
da.Fill(dt);
dataGridView1.DataSource = dt;

ma.rad
شنبه 10 اردیبهشت 1390, 22:35 عصر
اینم نوشتم ولی ایتمی به اسم filter نداشت
string str="1=1";

if (chbname.Checked )
str += "and name= "+txtname.Text;
if (chbfamili.Checked )
str +="and family= " +txtfamili .Text;
if (chbfather.Checked)
str +="and fatherName= "+ txtfather .Text;

morteza271
شنبه 10 اردیبهشت 1390, 22:41 عصر
خوب پس همین کد رو برای SP دیگت بنویس و بعدش این خط :

dataGridView1.DataSource = dt;
اگه خطا میده خطاشو بذار.
به نظر من خیلی کارتو سخت کردی راحت تر از اینم میشه!

ma.rad
شنبه 10 اردیبهشت 1390, 22:48 عصر
اگر روش راحت تری هست بگید

ma.rad
شنبه 10 اردیبهشت 1390, 22:52 عصر
اینو که گفتید نمی شه تو sp نوشت
هر روشی که میدونید رو کامل بگید
ممنون

morteza271
شنبه 10 اردیبهشت 1390, 23:03 عصر
ببین به نظر من از این روش بهتره :
توی دیتاست یه DataTableAdapter اضافه کن و کوئری رو به اون بده :
SELECT * FROM YoutTbl WHERE...

بعد بیا به فرمت و از پراپرتیس گردیت خاصیت دیتاسورسش رو برابر اون دیتاست و DataMember رو برابر اون DataTableAdapter کن.
با این کار سه تا آیتم DataSet،DataTableAdapter و DataBindingSource به زیر فرمتون اضافه میشه.
بعد در رویداد لود فرمت هم همون DatatableAdapter رو Fill کن.

و برای جستجو هم همون کد قبلی من رو مناسب برای برنامه خودت تغییر بده و سپس خاصیت فیلتر DataBindingSource گرید رو برابر همون StrFilter کن.

البته این روش منه و راستش با روش شما آشنایی زیادی ندارم.

الان که میخوام برم ولی اگه سوالی داشتین بذارین فردا صبح حتما جوابتون رو میدم.
موفق باشید.

ma.rad
یک شنبه 11 اردیبهشت 1390, 17:42 عصر
سلام دوستان روش دیگه ای به ذهنشون میرسه؟
هرکاری کردم جواب نداد....