PDA

View Full Version : جستجو در بانک با انتخاب ایتم از گرید



mahsa.admin
شنبه 22 مهر 1391, 11:22 صبح
باسلام
دوتا جدول داریم در بانک یکی لیست کتاب ها دیگری افرادی که از این لیست کتاب خرید کردند
در فرم یکی از جداول را به یک گرید وصل میکنیم مثل اسم کتاب ها حالا چطور میشود با زدن یک دکمه , با توجه به ایتم هایی که در گرید اول تیک زدیم سرچ کنه از بانک و در یک گرید دیگه نمایش بده من از کد زیر استفاده میکنم که فقط اولین تیکو درست نمایش میده
Dim ad AsNew SqlClient.SqlDataAdapter(sql, kian.cnnstring)
Dim dt AsNew DataTable
ad.Fill(dt)

ff.DataSource = dt


PublicFunction sql()
Dim str AsString = "select * from table where date >= '" & az.Text & "' And date <= '" & ta.Text & "'"
Dim str1 AsString = ""


For k AsInteger = 0 To dgv1.Rows.Count - 1
If dgv1.Rows(k).Cells("chek").Value = TrueThen
If str1 = ""Then
str1 = " and CodeSerivce='" & dgv1.Rows(k).Cells("code").Value & "'"
Else
str1 = str1 & " and CodeSerivce='" & dgv1.Rows(k).Cells("code").Value & "'"

EndIf
EndIf
Next


Return (str & str1)


EndFunction

mahsa.admin
سه شنبه 25 مهر 1391, 08:55 صبح
فکر میکنم توضیحاتم کامل نیست یکم مفصل تر توضیح میدم
فرض میکنیم دو جدول الف و ب در دیتا بیس داریم و این دو جدول یکی حاوی اسامی کتاب ها یکی حاوی افرادی هستن که این کتاب هار را خریدند
این دو جدول را مطابق عکس شماره که فرم اول هست به گرید ها بایند میکنیم
حالا چطور میشود با تیک کردن نام کتاب های از گرید سمت چپ گرید سمت راست انها را نمایش دهد مانند فرم شماره 2 که در شکل زیر هست (جستجو از بانک صورت گیرد)
من از کد های بالا استفاده کردم زمانی که یک کتاب تیک میشود جواب سرچ درست عمل میکند ولی زمانی که بیش از یک کتاب تیک میشود جواب نمیدهد

حسین شهریاری
سه شنبه 25 مهر 1391, 09:24 صبح
میتونی از فیلتر کردن بهره لازم را ببرید.
از BindingSource اسفاده کنین.

mahsa.admin
سه شنبه 25 مهر 1391, 10:49 صبح
ببخشید میشه بیشتر توضیح بدیدن
کدی که در پست اول نوشتم برای یک انتخاب جواب میده

حسین شهریاری
سه شنبه 25 مهر 1391, 11:18 صبح
یعنی با انتخاب درس در گریداول، بر اساس شماره درس، گریددوم را فیلتر کنید.

mahsa.admin
سه شنبه 25 مهر 1391, 11:36 صبح
جناب اقای شهریاری با تشکر از وقتی که گذاشتید
اونی که شما میگید سوالی هست که من دارم یعنی با انتخاب کتاب بایددرگرید دوم فیلتر بشه(البته از بانک فیلتر ودر گرید دوم نمایش داده شود) خوب راه حل این کار چیه ؟

حسین شهریاری
سه شنبه 25 مهر 1391, 12:55 عصر
1-با Select مجدد میشه
2-اگه گرید شما به BindingSource وصله، میتونی از خصوصیت Filter اون استفادن کنین.

bs.Filter="BookId=Value"
Value را از هرجایی میخاین بخونین
موفق باشید

barnamenevisforme
سه شنبه 25 مهر 1391, 13:27 عصر
سلام
روش های مختلفی برای filter کردن مقدارهای بازگشت داده شده از sql وجود داره.
همون طور که دوستمون جناب آقای حسین شهریاری (http://barnamenevis.org/member.php?94385-%D8%AD%D8%B3%DB%8C%D9%86-%D8%B4%D9%87%D8%B1%DB%8C%D8%A7%D8%B1%DB%8C) فرمودند،یکی از این روش ها استفاده از bindingsource.filter هست.
البته استفاده از bindingsource مزایای دیگه ای هم داره که از جمله میتونیم به navigate کردن بین recordهای متناسب بدون نیاز به کدنویسی اشاره کرد.
روش دیگه کار بر روی dataset و مقادیر موجود در اون هست.
این دو روشی که عرض کردم،میزان فشار روی sqlserver رو در بازیابی های بعدی کاهش میده.
روش دیگه ای که وجود داره و من فکر میکنم با روش مورد استفاده شما متناسب هست،استفاده از query خود sql هست.
کلمه کلیدی که شما باید اون رو مد نظر قرار بدید.IN هست.
یعنی:
Public Function sql()
Dim str As String = "select * from table where date >= '" & az.Text & "' And date <= '" & ta.Text & "'"
Dim str1 As String = ""
For k As Integer = 0 To dgv1.Rows.Count - 1
If dgv1.Rows(k).Cells("chek").Value = True Then
If str1 = "" Then
str1 = " and CodeSerivce IN (" & dgv1.Rows(k).Cells("code").Value
Else
str1 = str1 & " ," & dgv1.Rows(k).Cells("code").Value

End If
End If
Next
str1 = str1 & ")"
Return (str & str1)
End Function

mahsa.admin
چهارشنبه 26 مهر 1391, 09:58 صبح
با تشکر واقعا ممنونم مشکل حل شد:لبخندساده: