PDA

View Full Version : سوال: جستجو در گريد ويو



dab_hrd
شنبه 08 بهمن 1390, 09:45 صبح
با سلام
مي يك تكست باكس دارم كه مي خواهم با نوشتن حرفي داخل آن مثلا" نام كالا به صورت حرف به حرف در گريد نام و كد آنها نمايش دهد مثلا" اگر كاربر زد "پف" تمام كالاهيي كه بانام "پف" شروع مي شوند را نمايش دهد
با تشكر

saeedsos007
شنبه 08 بهمن 1390, 10:19 صبح
با سلام
مي يك تكست باكس دارم كه مي خواهم با نوشتن حرفي داخل آن مثلا" نام كالا به صورت حرف به حرف در گريد نام و كد آنها نمايش دهد مثلا" اگر كاربر زد "پف" تمام كالاهيي كه بانام "پف" شروع مي شوند را نمايش دهد
با تشكر
يک DataSet تعريف کنيد و با استفاده از DataAdapter اون رو پر کيند.
کد:

SqlDataAdapter da = new SqlDataAdapter("queryString", connection);
DataSet ds = new DataSet();
da.Fill(ds, "TableName");


يک DataView تعريف کنيد و با استفاده از DataSet اون رو پر کيند.
کد:

DataView dv = new DataView(ds.Tables["TableName"]);

حالا با استفاده از DataView میتونی DataGridVeiw رو پر کنی.
کد:

yourGridView.DataSource = dv;

حالا در رويداد textBox1_TextChanged کد زير بنويس:
کد:

dv.RowFilter = "yourFieldName Like '*" + textBox1.text + "*'";

yourFileName نام فيلدی هست که ميخوای ديتا رو از اون بگيری بر اساس تکست داخل تکست باکس فيلتر کنی.
اگر جواب گرفتی یک خبری بده

zarrinnegar
شنبه 08 بهمن 1390, 10:22 صبح
توی evente به نام TextChange اون تکست باکس بنویس که اطلاعات از دیتابیس فراخوانی بشه و به گرید دوباره وصل کن


string con = "select * from anbar where kala_name like '"+textbox1.text+"%'";

masoud_z_65
شنبه 08 بهمن 1390, 10:39 صبح
توی evente به نام TextChange اون تکست باکس بنویس که اطلاعات از دیتابیس فراخوانی بشه و به گرید دوباره وصل کن


string con = "select * from anbar where kala_name like '"+textbox1.text+"%'";


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

dab_hrd
شنبه 08 بهمن 1390, 14:18 عصر
ضمن تشكر از شما دوست عزيز
حيت اجرا بروي datamember گريد خطا مي زند (كه برابر اسم جدولم مي باشد)

zarrinnegar
شنبه 08 بهمن 1390, 14:41 عصر
دوست عزیز راه شما فکر کنم زیادی وقت گیر و هزینه بر باشه
آخه با هر کلیک اگه بخواد بره از دیتابیس بخونه و دوباره گرید رو پر کنه که خیلی زمانبر هستش!!!!

تعجب میکنم که چرا زمان گیر؟
وقتی شما مثلا 10000 رکورد رو بخوای لود کنی توی گرید و بعد با زدن حرف ب فقط ب ها رو لود کنی که مثلا 500 رکورده ، کجاش زمانبر هست؟
فکر کنم شما تا حالا شبکه ای کار نکردی چون اطلاعات تجمیع شده در گرید که میشه بهش گفت آفلاین ، بدرد کاربر توی شبکه نمیخوره چون هر لحظه امکان تغییر رکرود ها وجود داره
ولی توی برنامه های معمولی شاید حق با شما باشه ، گرچه من توی برنامه های عادی هم تست کردم اینقدر زمان رو حس نمیکنید حتی توی 10000 رکورد

masoud_z_65
شنبه 08 بهمن 1390, 15:08 عصر
تعجب میکنم که چرا زمان گیر؟
وقتی شما مثلا 10000 رکورد رو بخوای لود کنی توی گرید و بعد با زدن حرف ب فقط ب ها رو لود کنی که مثلا 500 رکورده ، کجاش زمانبر هست؟
فکر کنم شما تا حالا شبکه ای کار نکردی چون اطلاعات تجمیع شده در گرید که میشه بهش گفت آفلاین ، بدرد کاربر توی شبکه نمیخوره چون هر لحظه امکان تغییر رکرود ها وجود داره
ولی توی برنامه های معمولی شاید حق با شما باشه ، گرچه من توی برنامه های عادی هم تست کردم اینقدر زمان رو حس نمیکنید حتی توی 10000 رکورد

حرف شما در مورد وب درست هستش چون کیفیت صحت داده هامون خیلی مهمه
اما تو برنامه های ویندوزی فکر نکنم عقلانی باشه اگه تعداد رکوردها خیلی زیاد باشه الکی زمان بر میشه
در کل حالا میخوام بدونم یه را حل میانی برای اینکار هست؟
یه چیزی که هم بهترین کیفیت رو داشته باشیم و هم کمترین سرعت ممکن که میشه......ماگه راهی وجود داره میشه توضیح بدین؟

ahmad.salimi
شنبه 08 بهمن 1390, 15:41 عصر
سلام
دوست عزیز من ابتدا گرید را بایند می کنم بعد از کلاس زیر برای جستجو تو اون استفاده می کنم البته این کار رو زیز چنچ تکس باکس می نویسم:
public void SearchIntoGrid(DataGridView grd, string strSeach, int intCols)
{
foreach (DataGridViewRow row in grd.Rows)
{
if (row.Cells[intCols].Value == null)
{
continue;
}
if (row.Cells[intCols].Value.ToString().Trim().Contains(strSeach))
{
grd.CurrentCell = row.Cells[intCols];
return;
}
}
}

ali_habibi1384
شنبه 08 بهمن 1390, 15:52 عصر
فكر نميكنم يه سوال ساده نياز به اين همه بحث تاپيك داشته باشه.
فرض كن يك SP توي اس كيو ال داري به نام SelectAll كه توش نوشتي Select * From TblName كافيه اين SP رو اجرا كني و نتيجه اش رو بريزي مثلا توي dtTmp كه از نوع DataTable هست.(تا اينجاش رو كه همه ياد دارن).حالا اطلاعاتي كه توي ديتا تيبل هست شما كافيه انتقال بدي به گريد ويوت كه مثلا اسمش dgv هست. كافيه اين كد رو بنويسي:


dgv.DataSource = dttmp;

حالا وقتي ميخواي سرچ كني كافيه شما dttmp رو فيلتر كني.اگر تكست باكسي كه توش سرچ ميكني اسمش txtSearch باشه اين كد رو ميزني براي سرچ:


dttmp.DefaultView.RowFilter = ("FieldName like '%" + txtSearch.Text + "%'");

اميدوارم گويا توضيح داده باشم.

dab_hrd
یک شنبه 09 بهمن 1390, 13:10 عصر
با سلام و خسته نباشيد
براي من خطاي زير را مي دهد
با تشكر

armin72
یک شنبه 09 بهمن 1390, 14:03 عصر
من توی یکی از برنامه هام همونطوری که اون دوست عزیز گفتن توی txet change نوشتم . با چیزی حدود 7000 رکورد خیلی خوب کار میکنه

dab_hrd
دوشنبه 10 بهمن 1390, 09:55 صبح
لطفا" يكي در مورد خطاي من جواب بده!

dab_hrd
دوشنبه 10 بهمن 1390, 12:39 عصر
لطفا" يكي در مورد خطاي من جواب بده!

ali_habibi1384
دوشنبه 10 بهمن 1390, 15:59 عصر
با سلام و خسته نباشيد
براي من خطاي زير را مي دهد
با تشكر
دوست عزيز شما كه كار خودتو كردي اينا كه اصلا چيزايي كه ما گفتيم نيست.!!! يا اينكه اگر موضوع سوالت عوض شده يه تاپيك ديگه ايجاد كن

dab_hrd
سه شنبه 11 بهمن 1390, 12:47 عصر
دوستان ممنون درست شد