PDA

View Full Version : سوال: سرچ پویا



mahbubehjan
جمعه 06 مرداد 1391, 15:47 عصر
من میخواهم سرچ پویا انجام بدم و یسری تکست باکی دارم که میخواهم کاربر وقتی ، قسمتی از نام خانوادگی رو وارد کرد ، باید تمام کارمندانی که اول آن نام خانوادگی هستند فعال بشن .
در حالت فرم لود بصورت زیر هست :
Select * from tbl1

بعد مصلا به محض اینکه کاربر کلمه ای رو در روبروی نام خانوادگی نوشت ، شرط بصورت زیر بشه

Select * from tbm where lname =’%@lname%”

و به محض اینکه تلفن رو وارد کرد شرط بصورت زیر بشه :

Select * from tbm where lname =’%@lname%’ and tel=’0935’

به همین صورت و با هر تغییر اطلاعات در دیتاگرید نشون داده بشن .
ولی نمیدونم چجوری میشه
خیلی فوریه
ممنون میشم سریع پاسخ بدین

mahbubehjan
جمعه 06 مرداد 1391, 19:09 عصر
باید از like استفاده کنید
like را میدونم ولی میخام بدونم چجوری باید شرط جدید به دستور اضافه بشه
یعنی مثلا من نام خانوادگی را وارد کردم و یکسری اطلاعات را نشون داده و حالا میخام تلفن را هم وارد کنم و حالا این دو شرط همزمان با هم چک بشه
ولی نمیدونم توی چه رویدادی بنویسم.
توی رویداد text_chnage نوشتم ولی چون هر حرفی که وارد میشه فراخوانی میشه و رشته هم باید به رشته قبل اضافه بشه دچار خطا میشه

Mahmoud.Afrad
جمعه 06 مرداد 1391, 23:10 عصر
یک رویداد مینویسید و توش تمام تکست باکس ها رو چک میکنید و در صورت پر بودن به کوئری اضافه میکنید. رویداد تمام تکست باکسها رو روی همین یک رویداد تنظیم کنید تا نیاز به نوشتن دوباره کد نباشه.
private void textBox1_TextChanged(object sender, EventArgs e)
{
cmd.CommandText = "Select * from tbm where ";
if (textBox1.Text.Trim() != string.Empty)
cmd.CommandText += "lname like ’%@lname%' and ";
if (textBox1.Text.Trim() != string.Empty)
cmd.CommandText += "tel = @tel and ";

cmd.CommandText += "1=1";
// execute cmd
}

mahbubehjan
شنبه 07 مرداد 1391, 10:50 صبح
این روش یه مشکل داره و اینکه حتما اول نام خانوادگی را وارد نمیکنه ممکنه اول تلفن را وارد کنه یا فقط تلفن را وارد کنه در این صورت نباید قبلش and باشه بلکه باید where باشه
و اینکه من این قسمت رویداد تمام تکست باکسها رو روی همین یک رویداد تنظیم کنید تا نیاز به نوشتن دوباره کد نباشه. متوجه نشدم
یعنی نحوه کار با رویداد را بلد نیستم اگه ممکنه کدشو بذارین
من خودم به این صورت زیر نوشتم که به خاطر اینکه با وارد کردن هر حرفی وارد رویداد میشه یک flag گذاشتم که مشخص منه بار چندمه که وارد این شرط میشه تا این شرط دوباره به کوئری اضافه نشه و یک count که نشون میده چندمین شرطه ولی یک مشکل داره و اینکه اگه اطلاعات را وارد کرد ولی بعد پشیمون شد و خواست اطلاعات شخص دیگری را سرچ کنه دوباره تمام این شرط ها به کوئری اضافه میشه واسه این قسمتش نمیدونم چیکار کنم؟؟؟

private void TextBox11_TextChanged(object sender, EventArgs e)
{

//bool flag = false;
if (TextBox11.Text.Trim() != "" && count == 0 && flag == false)
{
flag = true;
//strsel = "select clPCode,clFname,clLname,clDname,clCerCode,clPosNum ,clNcode,clBfullsh,clInsurCode,clJobLoc from Clecrk where clLname like '%" + TextBox6.Text.Trim() + "%'";
strsel += " where rbAccNumber like '%" + TextBox11.Text.Trim() + "%'";
//count++;
}
else if (TextBox11.Text.Trim() != "" && count == 0 && flag == true)
{
strsel = "select clPCode,clFname,clLname,clDname,clCerCode,clPosNum ,clNcode,clBfullsh,clInsurCode,clJobLoc from Clecrk where rbAccNumber like '%" + TextBox11.Text.Trim() + "%'";
//count++;
}
else if (TextBox11.Text.Trim() != "" && count == 1 && flag == false)
{
flag = true;
//strsel = "select clPCode,clFname,clLname,clDname,clCerCode,clPosNum ,clNcode,clBfullsh,clInsurCode,clJobLoc from Clecrk where clLname like '%" + TextBox6.Text.Trim() + "%'";
strsel += " and rbAccNumber like '%" + TextBox11.Text.Trim() + "%'";
//count++;
}
else if (TextBox11.Text.Trim() != "" && count == 1 && flag == true)
{
//strsel = "select clPCode,clFname,clLname,clDname,clCerCode,clPosNum ,clNcode,clBfullsh,clInsurCode,clJobLoc from Clecrk where clLname like '%" + TextBox6.Text.Trim() + "%'";
strsel = temp;
strsel += " and rbAccNumber like '%" + TextBox11.Text.Trim() + "%'";
//count++;
}
else
{
countt[1]++;
int indx = strsel.LastIndexOf("rbAccNumber");
//int indx=strsel.IndexOf("rbAccNumber");
strsel=strsel.Substring(0,indx-4);
}

OleDbCommand cmd = new OleDbCommand(strsel, connectMod.acConct);
OleDbDataAdapter da = new OleDbDataAdapter(cmd);
DataSet ds = new DataSet();
da.Fill(ds, "load");
DataGridView1.DataSource = ds.Tables["load"];

}

private void TextBox11_Leave(object sender, EventArgs e)
{
if (TextBox11.Text.Trim() != "")
{
count = 1;
temp = strsel;
flag = false;
}
}

mahbubehjan
شنبه 07 مرداد 1391, 11:15 صبح
و اینکه وقتی اخر کوئری and باشه ولی شرطی نباشه خطا میده
بازم ممنون میشم اگه راهنمایی کنین

Mahmoud.Afrad
شنبه 07 مرداد 1391, 19:09 عصر
همه کوئری باید به یکباره ساخته بشه. اینکه باید where باید قبل قرار بگیره خوب توی مثالی که زدم همینطوره دیگه. با if چک کردم هر کدوم متنی داخلش بود به کوئری اضافه میشه هر کدوم خالی بود نه. اینی هم که آخرش and ممکنه باقی بمونه خوب اون 1=1 برای اینه که خطا نده.
برای تنظیم رویدادها مثلا توی رویداد تکست باکس اول این کدها رو میذاری بعد رویداد تکست باکس های دیگه رو از پنجره events باید این رویداد را انتخاب کنید(به جای دابل کلیک روی رویداد از کمبو نام رویدادی که نوشتید رو انتخاب کنید).

mahbubehjan
یک شنبه 08 مرداد 1391, 10:37 صبح
خیلی ممنون:لبخندساده:

ali_habibi1384
یک شنبه 08 مرداد 1391, 10:53 صبح
خیلی ممنون:لبخندساده:
از كليد تشكر استفاده كنيد:بامزه: