PDA

View Full Version : قرار دادن مقادیر رکوردهای بانک اطلاعاتی در listbox



mohamad2007
یک شنبه 20 مرداد 1387, 20:10 عصر
با سلام خدمت دوستان عزیز
من یک فرم دارم که توی اون یه textbox و یک listbox دارم. من می خوام وقتی تکست textbox تغییر می کنه، مقادیر از بانک اطلاعاتی شبیه اون هستند(به عنوان مثال جستجو بر اساس فامیل) در listbox نشون داده بشن.
حالا من میخوام بدونم که توی رویداد textchanged تکست باکس چی بنویسم که بتونه اینکار رو انجام بده. من زیاد به کار با ADO.net وارد نیستم، اگه ممکنه کامل توضیح بدید(از connect شدن تا...).
از دوستانی که نمونه کدی دارن و میتونن بذارن ممنون میشم که کدشون رو بذارن.
ممنون.
در ضمن بانک اطلاعاتی شامل 4 فیلد به نام های id, fname, lname, Address هستش که میخوام به شکل زیر توی listbox قرار بگیره:
مثال:25145 محمد محمدی (مشهد- بلوار فردوسی)

hdv212
یک شنبه 20 مرداد 1387, 21:00 عصر
فرض کن ما ListBox مون رو با کد زیر پر کردیم :

private DataView dvOrders;
private void button6_Click_1(object sender, EventArgs e)
{
string strCon = "data Source=.;initial catalog=northwind;trusted_connection=true;";
DataTable dt = new DataTable();
using (SqlConnection con = new SqlConnection(strCon))
{
SqlCommand cmd = new SqlCommand("select customerID from orders", con);
SqlDataReader dr;
con.Open();
dr = cmd.ExecuteReader();
dt.Load(dr);
con.Close();
}

this.dvOrders = dt.DefaultView;
this.listBox2.DataSource = dvOrders;
this.listBox2.DisplayMember = "CustomerID";
this.listBox2.ValueMember = "CustomerID";
}

حالا در رویداد Text_Changed کنترل TextBox ات میتونی رکوردهاتو بر اساس شرطت فیلتر کنی :

private void textBox2_TextChanged(object sender, EventArgs e)
{
this.dvOrders.RowFilter = "CustomerID like '%" + this.textBox2.Text + "%'";
}

mohamad2007
یک شنبه 20 مرداد 1387, 22:17 عصر
با عرض سلام و تشکر خدمت دوست عزیز hdv212
فقط یه مشکلی هست، اونم اینه که نمیدونم چرا کلماتی مثل SqlCommand رو نمی شناسه و خطا میگیره. شرمنده، مبتدیم دیگه.:خجالت:آیا باید از کتابخانه خاصی استفاده کنم؟؟
راستی من از sql server2005 استفاده می کنم. آیا connectionstring که نوشتید مربوط به همینه؟

hdv212
یک شنبه 20 مرداد 1387, 23:20 عصر
فقط یه مشکلی هست، اونم اینه که نمیدونم چرا کلماتی مثل SqlCommand رو نمی شناسه و خطا میگیره. شرمنده، مبتدیم دیگه.آیا باید از کتابخانه خاصی استفاده کنم؟؟
بله درسته، شما باید از فضای نام System.Data.SqlClient استفاده کنید.


راستی من از sql server2005 استفاده می کنم. آیا connectionstring که نوشتید مربوط به همینه؟
شما میتونید از همین ConnectionString در برنامه ی خودتون استفاده کنید، فقط بایستی initial catalog رو معادل نام دیتابیستون قرار بدید.

mohamad2007
دوشنبه 21 مرداد 1387, 11:49 صبح
با تشکر از دوست عزیزhdv212
فقط یه مشکل دیگه، اگه اینو بگین قول میدم که دیگه مزاحمتون نشم.
اسم Server بانک اطلاعاتی من mohamad\sqlexpress هستش، من connectionstring رو به صورت زیر نوشتم:

string strCon = "data Source=mohamad\sqlexpress;initial catalog=student;trusted_connection=true;";
مشکل اینجاست که بعد از \ خطا میگیره. چیکار باید بکنم؟ آیا باید اسم server رو عوض کنم؟ یا...؟

morva14
دوشنبه 21 مرداد 1387, 14:59 عصر
نخیر چون strCon رشته است باید از دو تا کارکتر \\ استفاده کنی یعنی اینجوری :

string strCon = "data Source=mohamad\sqlexpress;initial catalog=student;trusted_connection = true ;";

morva14
دوشنبه 21 مرداد 1387, 15:00 عصر
ببخشید اینجوری : data Source=mohamad\\sqlexpress

mohamad2007
دوشنبه 21 مرداد 1387, 21:19 عصر
با تشکر از همه دوستان
مشکلاتم تا اینجا حل شد و با کمک شما دوستان برنامه اونجوری که می خواستم کار می کنه فقط با این روش خیلی طول می کشه تا فرم لود بشه. نیازی ندارم که حتما همه اطلاعات در listbox قرار بگیره، مثلا وقتی فرم لود میشه listbox خالی باشه و وقتی Text تکست باکس تغییر می کنه رکوردهایی که شبیه اون هستن رو توی listbox قرار بده. من طوی جدول بانک اطلاعاتی حدود 50.000 رکورد دارم که این باعث میشه که خیلی سرعت پایین بیاد.
ممنون میشم که راهنماییم کنید. واقعا ممنونم، تا اینجا که خیلی کمکم کردین.:تشویق:

hdv212
دوشنبه 21 مرداد 1387, 22:16 عصر
خب شما میتونی در رویداد Text_Changed مربوط به TextBox ات رکوردها رو از دیتابیس بخونی، فقط یک مشکلی هست، اینکه هر بار که متن درون TextBox تغییر میکنه، میاد اطلاعات رو از جدول دوباره میخونه، برای این کار یک متغیر Global از نوع bool بساز (مثلا نامش رو بذار tableLoaded) که به صورت پیشفرض false باشه، زمانی که میخوای در رویداد Text_Changed اطلاعات رو از جدول بخونی، قبلش مقدار این متغیر رو کنترل کن، اگه false بود اطلاعات خوانده بشه و گرنه از شرط بیاد بیرون و اطلاعات مجددا لود نشه :

// global bool variable
bool tableLoaded = false;
private void textBox2_TextChanged(object sender, EventArgs e)
{
if (!this.tableLoaded)
{
// load your table data here
...
this.tableLoaded = true;
}

...
}

danial_rtw
شنبه 10 اردیبهشت 1390, 01:54 صبح
با سلام خدمت دوست عزیز hdv212
میخواستم بگم این کدی که شما نوشتی برای اضافه کردن یک ستون عالیه اما اگه ما بخواهیم 2تا ستون به لیست باکس اضافه کنیم چطور؟
مثلا نام ونام خانوادگی کنار هم با یه فاصله نمایش بده...