PDA

View Full Version : سوال: نحوه Find کردن یک رکورد



smgraphic
پنج شنبه 07 آبان 1388, 12:43 عصر
سلام خدمت همه اساتید.
من میخوام یک فیلدی که مثلا فیلد نام اون حسن هست رو Find کنم نه Filter
نمیخوام داده هام فیلتر شن.میخوام تمام اطلاعات باشند ولی همون رکوردی که میخوام انتخاب شده باشه بعد از Find کردن

pourang_us
شنبه 09 آبان 1388, 14:08 عصر
دوست عزیز میتونی اگر در دیتا گرید میخوای این اتفاق بیافته میتونی با یه دستور Select ساده شماره ردیفهای اطلاعات رو به دست بیاری و بعد با یه دستور شرطی اون ردیف در حالت انتخاب شده قرار بدی

smgraphic
شنبه 09 آبان 1388, 17:40 عصر
اگه میشه بیتر توضیح بدین

maXXis
دوشنبه 11 آبان 1388, 19:50 عصر
اره. لطفا بیشتر توضیح بدین.

saman_itc
دوشنبه 11 آبان 1388, 21:17 عصر
ol_cm = New OleDbCommand("select P_G_N.id as id1,P_G_N.datein as date1,fname,name,id_k,jari,moni,s_resid,p_d,typ from C_keshavarz ,P_G_N where C_keshavarz.id = P_G_N.id_k and typ like '%" & F10.Text & "%' ", ol_cn)
ol_da = New OleDbDataAdapter(ol_cm)
ds = New DataSet
ol_da.Fill(ds, "P_G_N")
DataGridView1.DataSource = ds.Tables("P_G_N")

یه DataGridView بنداز رو فرمت و یه دکمه اینارو طبق جدولت توش بنویس

smgraphic
چهارشنبه 13 آبان 1388, 05:53 صبح
با تشکر از اساتید.آقا سامان من نمیخوام فیلتر کنم.
میخوام Find بشه.
فرض کنید اسم 10 نفر تو دیتا گرید نشان داده شده،حالا من میخوام وقتی یه اسمی رو جستجو کردم 10 تا اسم دیگه باشند ولی اون اسم مورد نظر انتخاب شده باشه.
ممنونم

maXXis
پنج شنبه 14 آبان 1388, 12:15 عصر
می تونی بعد از اینکه پیداش کردی از Currentrow استفاده کنی.

DoDoklak
شنبه 16 آبان 1388, 08:41 صبح
شما میتونی Grid رو پیمایش کنی و اگر دستور شرطی برای پیدا کردن رکورد مورد نظر صحیح بود اون سطر رو در حالات انتخاب شده قرار بده

bastakboys
شنبه 16 آبان 1388, 08:45 صبح
شما میتونی Grid رو پیمایش کنی و اگر دستور شرطی برای پیدا کردن رکورد مورد نظر صحیح بود اون سطر رو در حالات انتخاب شده قرار بده
لطفا یک مثال از پیمایش گرید بزنید.

DoDoklak
شنبه 16 آبان 1388, 11:30 صبح
اگر میخوای دقیقا همون عبارت مورد نظر رو پیدا کنی میتونی کاز کد زیر استفاده کنی


Private Sub SearchGrid(ByVal Nam As String)
If String.IsNullOrEmpty(Nam) Then Exit Sub
If DGV.RowCount > 0 Then
For i As Integer = 0 To DGV.RowCount - 1
If DGV.Item("Cln_name", i).Value = Nam Then
DGV.Item("Cln_Name", i).Selected = True
Exit For
End If
Next i
End If
End Sub


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


Private Sub SearchGrid(ByVal Nam As String)
If String.IsNullOrEmpty(Nam) Then Exit Sub
If DGV.RowCount > 1 Then
Dim txtdgv As String = ""
For i As Integer = 0 To DGV.RowCount - 1
txtdgv = DGV.Item("Cln_Name", i).Value.ToString
If txtdgv.Contains(Nam) And txtdgv(0).ToString = Nam(0).ToString Then
DGV.Item("Cln_Name", i).Selected = True
Exit Sub
End If
Next
DGV.Item("Cln_Name", 0).Selected = True
DGV.Item("Cln_Name", 0).Selected = False
End If
End Sub

bastakboys
شنبه 16 آبان 1388, 17:01 عصر
دوست عزیز شما از حلقه برای این کار استفاده کردید
راهی دیگر برای این کار نیست
مانند find

DoDoklak
یک شنبه 17 آبان 1388, 08:50 صبح
دوست عزیز شما از حلقه برای این کار استفاده کردید

وقتی بحث از پیمایش میشه یعنی استفاده از حلقه ها حالا چه For ویا WHILE و...
DGV متدی جهت Find کردن نداره .شما دوتا راه دارید یا اطلاعات رو به وسیله DataView و یا Query جستجو کنید که البته اطلاعات رو فیلتر میکنه که شما گفتید نمی خواهید اینجوری بشه و یا DGV رو طبق روشی که گفتم و یا سایر روشهای دیگه پیمایش کنید.برای سرعت هم اصلا نگران نباش چون بسیار سریع پیمایش میشه حتی تاو اطلاعات زیاد
در کل من فکر نمی کنم راه دیگه حداقل برای گرید وجود داشته باشه

smgraphic
یک شنبه 17 آبان 1388, 10:35 صبح
DoDoklakعزیز دستورات شما درسته ولی اصلا منطقی و بهینه نیست.
در تعداد زیاد داده این دستورات بسیار کند عمل میکنند.
گفتی Find نمیشه ولی اگه ما دیتا گرید رو به DataSet وصل کنیم با استفاده از BindingSource میتونیم Find کنیم ,ولی من میخاوم با دستورات SQL عمل Find رو انجام بدم.
با تشکر از همه اساتید

bastakboys
یک شنبه 17 آبان 1388, 11:03 صبح
DoDoklakعزیز دستورات شما درسته ولی اصلا منطقی و بهینه نیست.
در تعداد زیاد داده این دستورات بسیار کند عمل میکنند.
گفتی Find نمیشه ولی اگه ما دیتا گرید رو به DataSet وصل کنیم با استفاده از BindingSource میتونیم Find کنیم ,ولی من میخاوم با دستورات SQL عمل Find رو انجام بدم.
با تشکر از همه اساتید
دوست عزیز می تونید یک مثال از find با استفاده از BindingSource به من بدید.

DoDoklak
یک شنبه 17 آبان 1388, 11:47 صبح
من هنوز هم میگم DGV گزینه Find نداره اگه شما دیدید به ما نشون بدید
استفاده از BindingSource موضوعی جدا از DGV هستش. درسته این آبجکت گزینه Find داره که جهت جستوجی یک مقدار در Dataset مورد استفاده قرار میگیره که بعد از پیدا کردن اون ردیف میتونی اونو تو DGV پیدا کنی

bastakboys
یک شنبه 17 آبان 1388, 13:57 عصر
من هنوز هم میگم DGV گزینه Find نداره اگه شما دیدید به ما نشون بدید
استفاده از BindingSource موضوعی جدا از DGV هستش. درسته این آبجکت گزینه Find داره که جهت جستوجی یک مقدار در Dataset مورد استفاده قرار میگیره که بعد از پیدا کردن اون ردیف میتونی اونو تو DGV پیدا کنی
شما درست می گید
من فقط یک مثال از این کار میخواهم

bastakboys
سه شنبه 19 آبان 1388, 06:41 صبح
چی شد کسی یک مثال از کار بالا نداره!

smgraphic
سه شنبه 19 آبان 1388, 10:58 صبح
دوستان و اساتید با عرض پوزش.
روشی که دوستمون DoDoklak گفتند هیچ فرقی با Find کردن نداره.
چون جستجو با Find یا Filter هر دو از روش جستجوی خطی استفاده میکنند و به همین دلیل هیج فرقی با استفاده کردن For یا While یا هر حلقه ای دیگه نداره.
دوستلن مـــــــــــــــــــعــــ ــــــــــــــــذرت