PDA

View Full Version : سوال: جستجوی پیشرفته در بانک اطلاعاتی



JustAcMilan
یک شنبه 18 فروردین 1392, 22:18 عصر
با سلام خدمت اساتید
میخواستم ببینم چجوری میشه یه کد واسه جستجوی پیشرفته تو بانک نوشت
مثلا اگه چند حرف رو وارد کنی خودش کلماتی که اون حروف رو دارند رو پیشنهاد بده


لطفا نگید بگردی پیدا میشه، تو همین پست جواب بدین ممنون میشم

C#‎_best_Programmer
یک شنبه 18 فروردین 1392, 22:32 عصر
Select * from Dt Where Name Like {0{%

naser_feb8646
دوشنبه 19 فروردین 1392, 20:27 عصر
سلام
دوست عزیز ابتدا همه اطلاعات رو بریز توی یک دیتاتیبل (datatable) بعد یک دیتاویو(dataview) بساز و مساوی با دیتاتیبل قرارش بده و در انتها هم از دستور RowFilter دیتاویو استفاده کن


DataView dv = new DataView(dt);
dv.RowFilter = "نام فیلد LIKE'%" + txtModir.Text + "%'";
dgv.DataSource = dv

dt: نام datatable
نام فیلد : فیلدی که بر اساس اون میخواین جستجو صورت بگیره
dgv: نام datagridview

JustAcMilan
دوشنبه 19 فروردین 1392, 21:53 عصر
با تشکر از شما و دوستانی که جواب دادن
ولی من نمیخوام از دیتا گرید ویو استفاده کنم میخوام موقع تایپ کلمه یه باکس باز بشه و کلمات پیشنهادی توش باشه که قابلیت انتخاب هم داشته باشن
یه چیز مثه تصویر زیر
لطفا راهنمایی کنید

102542

veniz2008
سه شنبه 20 فروردین 1392, 17:10 عصر
یه چیز مثه تصویر زیر
102542
سلام.
یه جدول برای کاربران دارم که شامل نام و عکس هر شخص هست.(عکس درون دیتابیس ذخیره شده).
یه TextBox و یک ListBox روی فرم قرار دادم و اونا رو طبق چیزی که دوست داشتم بر روی فرم تنظیم کردم.
حالا در رویداد TextChanged مربوط به TextBox کد زیر رو نوشتم. کدها کاملا واضح هستن و تنها نکته مهم برای پیاده سازی این مساله ایجاد شی pictureBox بصورت داینامیک و در زمان اجرای برنامه هستش.
ولی اگر هرجاش رو متوجه نشدید بگید تا توضیح بدم.

private void TxtSearch_TextChanged(object sender, EventArgs e)
{
if (!string.IsNullOrWhiteSpace(TxtSearch.Text.Trim()) )
{
SqlConnection con = new SqlConnection("server = .\\md2008;database = DBPresent;Integrated Security = True");
SqlDataAdapter da = new SqlDataAdapter("Select * from TblUsers where UserName Like @uname", con);
da.SelectCommand.Parameters.AddWithValue("@uname", TxtSearch.Text.Trim() + "%");
DataTable dt = new DataTable();
da.Fill(dt);
if (dt.Rows.Count == 0)
{
listBox1.Items.Clear();
listBox1.Controls.Clear();
}
else
{
listBox1.Items.Clear();
listBox1.Controls.Clear();
PictureBox[] Shapes = new PictureBox[dt.Rows.Count];
int j = 0;
for (int i = 0; i < dt.Rows.Count; i++)
{

listBox1.Items.Add(" " + dt.Rows[i]["FirstName"].ToString());
if (dt.Rows[i]["UserImage"].ToString().Length > 0)
{
byte[] picture = (byte[])dt.Rows[i]["UserImage"];
MemoryStream ms = new MemoryStream(picture);
ms.Seek(0, SeekOrigin.Begin);
Shapes[i] = new PictureBox();
Shapes[i].Name = "ItemNum_" + i.ToString();
Shapes[i].Location = new Point(5, j);
Shapes[i].Size = new Size(50, 50);
Shapes[i].BackColor = Color.Black;
Shapes[i].SizeMode = PictureBoxSizeMode.StretchImage;
Shapes[i].BorderStyle = BorderStyle.Fixed3D;
Shapes[i].Image = Image.FromStream(ms);
Shapes[i].Visible = true;
listBox1.Controls.Add(Shapes[i]);
}
listBox1.Items.Add("");
listBox1.Items.Add("");
listBox1.Items.Add("");
listBox1.Items.Add("- - - - - - - - - - - - - - - - - - - - ");
j += 60;
}
}
}
else
{
listBox1.Items.Clear();
listBox1.Controls.Clear();
}
}
تصویری از برنامه در سیستم من :
102558

102559
ممکنه 100 درصد اون چیزی نباشه که شما میخواید ولی میتونه بهتون ایده بده که چطور اون چیزی رو که میخواید بصورت سفارشی برای خودتون پیاده سازی کنید.
موفق باشید.

JustAcMilan
جمعه 23 فروردین 1392, 17:42 عصر
سلام.
یه جدول برای کاربران دارم که شامل نام و عکس هر شخص هست.(عکس درون دیتابیس ذخیره شده).
یه TextBox و یک ListBox روی فرم قرار دادم و اونا رو طبق چیزی که دوست داشتم بر روی فرم تنظیم کردم.
حالا در رویداد TextChanged مربوط به TextBox کد زیر رو نوشتم. کدها کاملا واضح هستن و تنها نکته مهم برای پیاده سازی این مساله ایجاد شی pictureBox بصورت داینامیک و در زمان اجرای برنامه هستش.
ولی اگر هرجاش رو متوجه نشدید بگید تا توضیح بدم.

private void TxtSearch_TextChanged(object sender, EventArgs e)
{
if (!string.IsNullOrWhiteSpace(TxtSearch.Text.Trim()) )
{
SqlConnection con = new SqlConnection("server = .\\md2008;database = DBPresent;Integrated Security = True");
SqlDataAdapter da = new SqlDataAdapter("Select * from TblUsers where UserName Like @uname", con);
da.SelectCommand.Parameters.AddWithValue("@uname", TxtSearch.Text.Trim() + "%");
DataTable dt = new DataTable();
da.Fill(dt);
if (dt.Rows.Count == 0)
{
listBox1.Items.Clear();
listBox1.Controls.Clear();
}
else
{
listBox1.Items.Clear();
listBox1.Controls.Clear();
PictureBox[] Shapes = new PictureBox[dt.Rows.Count];
int j = 0;
for (int i = 0; i < dt.Rows.Count; i++)
{

listBox1.Items.Add(" " + dt.Rows[i]["FirstName"].ToString());
if (dt.Rows[i]["UserImage"].ToString().Length > 0)
{
byte[] picture = (byte[])dt.Rows[i]["UserImage"];
MemoryStream ms = new MemoryStream(picture);
ms.Seek(0, SeekOrigin.Begin);
Shapes[i] = new PictureBox();
Shapes[i].Name = "ItemNum_" + i.ToString();
Shapes[i].Location = new Point(5, j);
Shapes[i].Size = new Size(50, 50);
Shapes[i].BackColor = Color.Black;
Shapes[i].SizeMode = PictureBoxSizeMode.StretchImage;
Shapes[i].BorderStyle = BorderStyle.Fixed3D;
Shapes[i].Image = Image.FromStream(ms);
Shapes[i].Visible = true;
listBox1.Controls.Add(Shapes[i]);
}
listBox1.Items.Add("");
listBox1.Items.Add("");
listBox1.Items.Add("");
listBox1.Items.Add("- - - - - - - - - - - - - - - - - - - - ");
j += 60;
}
}
}
else
{
listBox1.Items.Clear();
listBox1.Controls.Clear();
}
}
تصویری از برنامه در سیستم من :
102558

102559
ممکنه 100 درصد اون چیزی نباشه که شما میخواید ولی میتونه بهتون ایده بده که چطور اون چیزی رو که میخواید بصورت سفارشی برای خودتون پیاده سازی کنید.
موفق باشید.


با تشکر بینهایت از شما
من از این کد در برنامم استفاده کردم و درست کار کرد فقط تو چند مورد اگه میشه کمکم کنید
اول اینکه من میخوام نام و فامیل و عکس باهم یک دسته بشن که با انتخابش اونو تو datagridview نشون بده ، توی این برنامه ای که من نوشتم فقط در صورتی نشون میده که روی نام کلیک کنیم (اگه روی فامیلی یا عکس کلیک کنیم هیچ اتفاقی نمی افته)
این تصویر برنامم هستش
102700


دوم اینکه با جابجایی اسکرول بار listbox1 تصاویر به هم میریزن(مث تصویر زیر)
102701

سوم اینکه اگه سایز لیست باکس با توجه به تعداد آیتمهاش متناسب میشد خیلی خوب بود



در آخر می خواستم واقعا ازتون تشکر کنم
اگه کمک کنید این مواردو برطرف کنم خیلی چیز خوبی میشد

برنامم رو ضمیمه میکنم

http://s2.picofile.com/file/7723391933/PictureSearchBackup.rar.html

Mahmoud.Afrad
جمعه 23 فروردین 1392, 19:33 عصر
باید آیتم ها را همراه عکسشان draw کنید.
این کنترل (http://barnamenevis.org/showthread.php?337810-%D8%B3%D8%A7%D8%AE%D8%AA-%DA%A9%D9%85%D8%A8%D9%88-%D8%A8%D8%A7%DA%A9%D8%B3-%D8%A2%DB%8C%DA%A9%D9%88%D9%86-%D8%AF%D8%A7%D8%B1-ComboBox-With-Icon&p=1519387&viewfull=1#post1519387) را قبلا نوشتم. برای استفاده از این کنترل ، یک ایمیج لیست روی فرم قرار بدید و اندازه و عمق رنگ رو تعیین کنید. پس از واکشی اطلاعات عکسها رو به ایمیج لیست اضافه کنید. این کمبوباکس هم یک خاصیت به اسم ItemImages داره که باید برابر ایمیج لیست قرار بدید.
برای تغییر آیتم ها باید متناسب با آیتم ها ایمیج لیست را clear و دوباره پر کنید.