PDA

View Full Version : جستجوی پویا در datagridView



rnm123
جمعه 12 تیر 1388, 13:36 عصر
با سلام به همگی
حتما همه شما برنامه های موبایل را دیده اید که در میان اطلاعات تماسها چگونه میتوانید سرچ کنید یعنی با تایپ حروف فرد مورد نظر به تدریخ لیست نمایش داده شده آپدیت شده و محدودتر میشود . میخواستم ببینم میتوان چنین کاری را در مورد اطلاعات موجود در یک datagridview انجام داد. کسی تا به حال چنین موردی را دیده است ؟

Yasersadegh
جمعه 12 تیر 1388, 14:52 عصر
سلام دوست عزيز
شما به راحتي مي تونيد اينكارو انجام بديد!!:چشمک:
شما بايد ابتدا يه ديتا ريدر (dataReader) ايجاد كنيد سپس با like يه كوئري بنويسيد و اطلاعات رو در ديتا ريدر قرار بديد و با استفاده از يه تابع هر بار ديتا ريدر را در datagrideviwe نمايش بديد!!
و تمام اين كد رو در بخش Keypress تكست باكستون مي نويسيد!!!
اگر متوجه نشديد بگيد كه با مثال توضيح بدم!!:چشمک:

rnm123
جمعه 12 تیر 1388, 22:05 عصر
با سلام و خسته نباشید . دوست عزیز یک سئوال مگر به کمک sqlDatareader در یک لحظه میتوان بیش از یک رکورد را خواند ؟ اگر میشود یک مثال بزنید . نکند منظور شما ایجاد یک dataset یا dataview بوده است؟

mohsen_zelzela00
شنبه 13 تیر 1388, 00:49 صبح
با سلام و خسته نباشید . دوست عزیز یک سئوال مگر به کمک sqlDatareader در یک لحظه میتوان بیش از یک رکورد را خواند ؟ اگر میشود یک مثال بزنید . نکند منظور شما ایجاد یک dataset یا dataview بوده است؟
بله دوست عزیز میشه به کد زیر نگاه کنید


SqlCommand com = newSqlCommand("select count(*) from tb1 ", con);
SqlDataReader dr;
con.Open();
dr = com.ExecuteReader();
while (dr.Read())
{
dataGridView2.Rows.Add(dr["fild1"].ToString(),dr["fild2"].ToString());
}
con.close();

Yasersadegh
شنبه 13 تیر 1388, 08:39 صبح
با سلام و خسته نباشید . دوست عزیز یک سئوال مگر به کمک sqlDatareader در یک لحظه میتوان بیش از یک رکورد را خواند ؟ اگر میشود یک مثال بزنید . نکند منظور شما ایجاد یک dataset یا dataview بوده است؟
دوست عزيز در واقع در هر لحظه يك ركورد را بيشتر نمي توان خواند، نوع آبجكتش فرقي نمي كنه هر آبجكتي كه باشه همينطوره!!
اما همونطور كه دوستمون mohsen_zelzela00 در كدشون نوشتن مي بينيد كه مي تونيد يه كوئري به هر تعداد ركورد را در ديتاريدر قرار بديد و سپس با استفاده از يه حلقه تمام ركوردها رو بخوانيد و در Datagrideview نمايش بديد!!
**متد Read در ديتاريدر هربار تنها يه ركورد رو مي خونه!!


شما بايد ابتدا يه ديتا ريدر (dataReader) ايجاد كنيد سپس با like يه كوئري بنويسيد
برايه اين كار شما بايد در كد دوستمون قسمت زير رو با توجه به نيازتون تغيير بديد!!


SqlCommand com = newSqlCommand("select count(*) from tb1 ", con);

rnm123
شنبه 13 تیر 1388, 16:31 عصر
با تشکر از همه دوستان راه حل شما را امتحان کردم و جواب هم داد ولی یک مشکلی است . باری تست سرعت 100 رکورد در پاگاه داده ایجاد کردم . با این روش عملا با سرعت تایپ معمولی کابر توقف لحظه ای برنامه کاملا مشهود میشود. حال اگر این برنامه روی یک کامپیوتر ضعیفتر نصب شود که واویلا میشود. برای افزایش سرعت به نظرتان چه کنیم . آیا میشود در DATAvIEW عملیات LIKE را پیاده سازی کرد . یعنی به جای اینکه با تایپ هر حرف توسط کاربر بجای جستجوی دوباره پایگاه داده فقط DATAVIEW پرشده سرچ شود؟

Yasersadegh
شنبه 13 تیر 1388, 19:06 عصر
دوست عزيز قاعدتا نبايد خيلي سرعت سيستم گرفته بشه ولي اگه اون كارم بخواهيد كنيد اولا كه خيلي كار بيشتري مي بره و ضمنا تضميني هم نيست كه سريع تر از اين روش انجام بشه!!
به نظر من شما به جاي حلقه اي كه در كد دوستمون بود از حلقه زير استفاده كنيد شايد بهتر بشه!!:لبخندساده:


object[] record = new object[4];
while (dr.Read())
{
dr.GetValues(record);
dataGridView1.Rows.Add(record);
}

موفق باشيد:چشمک:

Sajjad.Aghapour
شنبه 13 تیر 1388, 22:54 عصر
فکر نمی کنید برای دسترسی به دیسک باید بهای زیادی رو پرداخت کرد.چرا از DataGridViewRowCollection استفاده نمی کنید.....

sara62
سه شنبه 06 مرداد 1388, 13:27 عصر
با تشکر از همه دوستان راه حل شما را امتحان کردم و جواب هم داد ولی یک مشکلی است . باری تست سرعت 100 رکورد در پاگاه داده ایجاد کردم . با این روش عملا با سرعت تایپ معمولی کابر توقف لحظه ای برنامه کاملا مشهود میشود. حال اگر این برنامه روی یک کامپیوتر ضعیفتر نصب شود که واویلا میشود. برای افزایش سرعت به نظرتان چه کنیم . آیا میشود در DATAvIEW عملیات LIKE را پیاده سازی کرد . یعنی به جای اینکه با تایپ هر حرف توسط کاربر بجای جستجوی دوباره پایگاه داده فقط DATAVIEW پرشده سرچ شود؟

سلام
این کد یک بار دیتابیس را جستجو می کند و با نتایج جستجو کار میکنه فکر میکنم منظورتان همین بود

da = new SqlDataAdapter("",con);
con.Open();
da.Fill(dataset1,"e");
con.Close();
private void textBox1_TextChanged(object sender, EventArgs e)
{
DataTable table1 = new DataTable();
table1 = dataset1.Tables["e"];
table1.DefaultView.RowFilter = "family_m like'%" + textBox1.Text + "%'";
if (table1.DefaultView.Count == 0)
MessageBox.Show("رکوردی با این مشخصات یافت نشد");
dataGrid1.DataSource = table1.DefaultView;
table1 = null;موفق باشید

Unknownlive
سه شنبه 06 مرداد 1388, 16:02 عصر
شما باید با %Like% در رویداد Change شی TextBox که می خواهد جستجو انجام شود بنویسید

m0rteza
سه شنبه 06 مرداد 1388, 16:50 عصر
من قبلا می خواستم همچین کاری انجام بدم
برای این کار از DataView استفاده کردم . ولی یادمه برای مقادیره عددی زیاد چالب کار نکرده بود
ولی من دیدم و شنیدم که کامپوننت هایی وجود داره که گرید خودش همچین امکاناتی داره
فکر کنم DEV Component بود . به نظر استفاده از اونا خیلی بهتره

Mahdi.Kiani
سه شنبه 06 مرداد 1388, 21:02 عصر
سلام
چرا برای جستجو ها از LINQ استفاده نمی کنید؟ محدوده عملیاتی که می توانید انجام دهید اصلا قابل قیاس با یک دستور Like نیست!

hrbaban
یک شنبه 01 شهریور 1388, 19:29 عصر
سلام
چرا برای جستجو ها از LINQ استفاده نمی کنید؟ محدوده عملیاتی که می توانید انجام دهید اصلا قابل قیاس با یک دستور Like نیست!



میشه یه نمونه مثال بزنید ؟

mustafa13
یک شنبه 01 شهریور 1388, 21:52 عصر
سلام
کسی سورس کامل اش را با دیتابیس اکسس آماده نکرده

#aliyari_C
دوشنبه 02 شهریور 1388, 00:52 صبح
سلام
اگه نظر منو می خوای بیا از Janus Gridex استفاده کن چون دو نوع فیلتر گذاری را از پیش تعیین شده دارا می باشد هم کارت را راحت می کند و هم زیبا

------------------------------------------------------------------------------------------

ماهی لب بسته را اندیشه قلاب نیست

hrbaban
دوشنبه 02 شهریور 1388, 01:00 صبح
سلام
اگه نظر منو می خوای بیا از Janus Gridex استفاده کن چون دو نوع فیلتر گذاری را از پیش تعیین شده دارا می باشد هم کارت را راحت می کند و هم زیبا

------------------------------------------------------------------------------------------

ماهی لب بسته را اندیشه قلاب نیست



یه کد بزارید تا بفهمیم چجوریه ....................

hrbaban
دوشنبه 02 شهریور 1388, 19:18 عصر
کسی نیست ؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟؟//