sadeghx98
یک شنبه 24 شهریور 1392, 18:51 عصر
سلام
من این کد هارو برای انجام جستجو یی خیلی راحت در برای مثال یک فرم اعضا در نظر گرفتم که کاربر وقتی یک یا چند تکست باکس رو پر میکنه جستجو ها به راحتی بهش نشون داده شه
من این تابع رو تعریف کردم و با هر بار که یکی از تکست باکس هام تغییر میکنه این تابع فرا خونی میشه
public void serch()
{
if (txtmname.Text == "" && txtmfamily.Text == "" && txtmdate.Text == "" && txtmparent.Text == "")
{
cmstr = "SELECT * FROM Member";
s1 = 0;
s2 = 0;
s3 = 0;
s4 = 0;
}
else
{
cmstr = cmstr + " WHERE";
if (txtmname.Text != "")
{
if (s2 == 0 && s3 == 0 && s4 == 0)
{
cmstr = cmstr + " pname LIKE'%" + txtmname.Text + "%'";
s1 = 1;
}
else
{
cmstr = cmstr + " AND pname LIKE'%" + txtmname.Text + "%'";
}
}
if (txtmfamily.Text != "")
{
if (s1 == 0 && s3 == 0 && s4 == 0)
{
cmstr = cmstr + " pfamily LIKE'%" + txtmfamily.Text + "%'";
s2 = 1;
}
else
{
cmstr = cmstr + " AND pfamily LIKE'%" + txtmfamily.Text + "%'";
}
}
if (txtmdate.Text != "")
{
if (s1 == 0 && s2 == 0 && s4 == 0)
{
cmstr = cmstr + " pdate LIKE'%" + txtmdate.Text + "%'";
s3 = 1;
}
else
{
cmstr = cmstr + " AND pdate LIKE'%" + txtmdate.Text + "%'";
}
}
if (txtmparent.Text != "")
{
if (s1 == 0 && s2 == 0 && s3 == 0)
{
cmstr = cmstr + " pparent LIKE'%" + txtmparent.Text + "%'";
s4 = 1;
}
else
{
cmstr = cmstr + " AND pparent LIKE'%" + txtmparent.Text + "%'";
}
}
}
refresh();
}
اما به نظر من خیلی شلوغه و پشتوانه ی منطقی نداره
حالا توضیح :
این کد در ابتدا چک میکنه اگه همه تکست باکس ها پر بودند همه ی دیتابیس رو نشون بده
اگر نه
یک کلمه where به رشته ی cmstr که در اون کد sql قرار گرفته اضافه میشه
و ...
مقادیر s1 تا s4 هم برای این در نظر گرفته شدند که اگر یک تکه رشته به cmstr اضافه شد برای بار اول and نداشته باشه
امید وارم متوجه شده باشید !
در پایان هم تابع refresh صدا زده میشه که اینه
public void refresh()
{
try
{
OleDbDataAdapter da = new OleDbDataAdapter(cmstr,cn);
DataTable dt = new DataTable();
da.Fill(dt);
dgwm.DataSource = dt;
cmstr = "SELECT * FROM Member";
s1 = 0;
s2 = 0;
s3 = 0;
s4 = 0;
}
catch
{
MessageBox.Show("اشکال در دیتا بیس", "Error");
this.Close();
}
}
این کدها برای من خیلی خوب جواب میدن اما
دوستان و اساتید محترم میتونن یک روش بهتر و بهینه تر رو بگن یا ایراد های این کد ها رو ؟
من این کد هارو برای انجام جستجو یی خیلی راحت در برای مثال یک فرم اعضا در نظر گرفتم که کاربر وقتی یک یا چند تکست باکس رو پر میکنه جستجو ها به راحتی بهش نشون داده شه
من این تابع رو تعریف کردم و با هر بار که یکی از تکست باکس هام تغییر میکنه این تابع فرا خونی میشه
public void serch()
{
if (txtmname.Text == "" && txtmfamily.Text == "" && txtmdate.Text == "" && txtmparent.Text == "")
{
cmstr = "SELECT * FROM Member";
s1 = 0;
s2 = 0;
s3 = 0;
s4 = 0;
}
else
{
cmstr = cmstr + " WHERE";
if (txtmname.Text != "")
{
if (s2 == 0 && s3 == 0 && s4 == 0)
{
cmstr = cmstr + " pname LIKE'%" + txtmname.Text + "%'";
s1 = 1;
}
else
{
cmstr = cmstr + " AND pname LIKE'%" + txtmname.Text + "%'";
}
}
if (txtmfamily.Text != "")
{
if (s1 == 0 && s3 == 0 && s4 == 0)
{
cmstr = cmstr + " pfamily LIKE'%" + txtmfamily.Text + "%'";
s2 = 1;
}
else
{
cmstr = cmstr + " AND pfamily LIKE'%" + txtmfamily.Text + "%'";
}
}
if (txtmdate.Text != "")
{
if (s1 == 0 && s2 == 0 && s4 == 0)
{
cmstr = cmstr + " pdate LIKE'%" + txtmdate.Text + "%'";
s3 = 1;
}
else
{
cmstr = cmstr + " AND pdate LIKE'%" + txtmdate.Text + "%'";
}
}
if (txtmparent.Text != "")
{
if (s1 == 0 && s2 == 0 && s3 == 0)
{
cmstr = cmstr + " pparent LIKE'%" + txtmparent.Text + "%'";
s4 = 1;
}
else
{
cmstr = cmstr + " AND pparent LIKE'%" + txtmparent.Text + "%'";
}
}
}
refresh();
}
اما به نظر من خیلی شلوغه و پشتوانه ی منطقی نداره
حالا توضیح :
این کد در ابتدا چک میکنه اگه همه تکست باکس ها پر بودند همه ی دیتابیس رو نشون بده
اگر نه
یک کلمه where به رشته ی cmstr که در اون کد sql قرار گرفته اضافه میشه
و ...
مقادیر s1 تا s4 هم برای این در نظر گرفته شدند که اگر یک تکه رشته به cmstr اضافه شد برای بار اول and نداشته باشه
امید وارم متوجه شده باشید !
در پایان هم تابع refresh صدا زده میشه که اینه
public void refresh()
{
try
{
OleDbDataAdapter da = new OleDbDataAdapter(cmstr,cn);
DataTable dt = new DataTable();
da.Fill(dt);
dgwm.DataSource = dt;
cmstr = "SELECT * FROM Member";
s1 = 0;
s2 = 0;
s3 = 0;
s4 = 0;
}
catch
{
MessageBox.Show("اشکال در دیتا بیس", "Error");
this.Close();
}
}
این کدها برای من خیلی خوب جواب میدن اما
دوستان و اساتید محترم میتونن یک روش بهتر و بهینه تر رو بگن یا ایراد های این کد ها رو ؟