چگونگی جستجو درون یک دیتاگرید
با سلام خدمت همه
این سوالی رو که می پرسم ماهیتا با این تایپیک https://barnamenevis.org/showthread.p...B1%DB%8C%D8%AF
فرق می کنه
توی گرید من حدود هزار تا رکورد هست می خوام کاربر جستجوهاش رو توی گرید انجام بده و نتایج رو همون لحظه سلکت کنه بدون اینکه رکوردها فیلتر بشن
راهش چیه
ممنون از لطفاتون
نقل قول: چگونگی جستجو درون یک دیتاگرید
یعنی اگه نوشتی فرید و تو ستون اسم کوچک هر کدوم فرید بود به حالت انتخاب دربیان؟
مثلا اگه سطرهای 1و4و201 اسم فرید بود این سه ستون به حالت انتخاب در بیان و بقیه نه؟
نوع فیلتر رو هم بگید ، حالت دقیق(فقط اسم هایی که فرید هستن) یا حالت مشابه (اسم هایی که حاوی فرید هستن مثل:فرید،فریدون،فریده و ....)!
این موارد داخل یک حلقه می تونن عملی بشن
نقل قول: چگونگی جستجو درون یک دیتاگرید
"Select * From Table1 Where Id Like 'N %" + TextBox1.Text + "N %' And Name Like 'N %" + TextBox2.Text + " N%' And Family Like 'N %" + TextBox3.Text + "N %'"
نقل قول: چگونگی جستجو درون یک دیتاگرید
نقل قول:
نوشته شده توسط
moslem68
"Select * From Table1 Where Id Like 'N %" + TextBox1.Text + "N %' And Name Like 'N %" + TextBox2.Text + " N%' And Family Like 'N %" + TextBox3.Text + "N %'"
نقل قول:
بدون اینکه رکوردها فیلتر بشن
------------------------------------------
نقل قول: چگونگی جستجو درون یک دیتاگرید
ببینید دوستان اطلاعات توی گرید با یک سلکت پر می شه
SELECT * FROM Table1
خب حالا به دیتاست و .....
وقتی دیتاگرید پرشد و رکوردها توش هست حالا می خوایم از توی این رکوردها جستجو انجام بدیم
شما چیکار می کنید؟
ممنون
نقل قول: چگونگی جستجو درون یک دیتاگرید
بفرما
Dim i, a AsInteger
For i = 1 To DataGridView1.Rows.Count - 1
For a = 1 To DataGridView1.Columns.Count - 2
If TextBox1.Text = DataGridView1.Rows(i).Cells(a).Value Then
DataGridView1.Rows(i).Cells(a).Selected = True
EndIf
Next
Next
نقل قول: چگونگی جستجو درون یک دیتاگرید
"Select * From Table1 Where Id Like 'N %" + TextBox1.Text + "N %' And Name Like 'N %" + TextBox2.Text + " N%' And Family Like 'N %" + TextBox3.Text + "N %'"
فکر کنم این کد مشکل امنیتی داره کافیه یوزر یه علامت ' وارد کنه و بعد دستور SQL مورد نظرش رو وارد کنه .مطمئن نیستم ولی احتمالا sql injection به وجود بیاد چون ورودی فیلتر نشده!
نقل قول: چگونگی جستجو درون یک دیتاگرید
نقل قول:
نوشته شده توسط
saeidpsl
بفرما
Dim i, a AsInteger
For i = 1 To DataGridView1.Rows.Count - 1
For a = 1 To DataGridView1.Columns.Count - 2
If TextBox1.Text = DataGridView1.Rows(i).Cells(a).Value Then
DataGridView1.Rows(i).Cells(a).Selected = True
EndIf
Next
Next
دوست من از لطف شما ممنونم
حالا توی توابع sql دیدی که عملگر Like داریم اینجا چطوری عمل کنیم
ممنونم
نقل قول: چگونگی جستجو درون یک دیتاگرید
:چشمک:خواهش
جستجوی like به شکل حرف حرف یا دونه دونه یا len len چک میکنه پس باید پس اینجوری میشه
مثل این
Dim p, o AsInteger
Dim db AsString
db = DataGridView1.Rows(i).Cells(a).Value
For p = 1 To Len(db)
For o = 1 To Len(TextBox1.Text)
If Mid(TextBox1.Text, o, o) = Mid(DataGridView1.Rows(i).Cells(a).Value.ToString, p, p) Then
DataGridView1.Rows(i).Cells(a).Selected = True
EndIf
Next
Next
نقل قول: چگونگی جستجو درون یک دیتاگرید
Sub Find_In_Grid()
Dim db As String
Dim I As Integer
db = DataGridViewX1.Rows(I).Cells(5).Value
For p = 1 To Len(db)
For o = 1 To Len(txtFind.Text)
If Mid(txtFind.Text, p, p) = Mid(DataGridViewX1.Rows(I).Cells(5).Value.ToString , p, p) Then
DataGridViewX1.Rows(I).Cells(5).Selected = True
End If
Next
Next
End Sub
دوست من این کد رو استفاده کردم کار نکرد
نمی دونم عیبش چیه
نقل قول: چگونگی جستجو درون یک دیتاگرید
دوست عزیز شما به جای MID باید از InStr استفاده کنید هم راحته هم حلقه داخلی حذف می شه!
ون از همه مهمتر اینکه من اصلا متوجه نشدم این تابع شما دنبال چی می گرده
ولی اینو می دونم که اگه یک حرف از سلول گرید با یک حرف از منت تکست باکس مشابه باشن سلول انتخاب میشه (مثلا abcd و dcba باه برابرند!!!)
Sub Find_In_Grid(SearchFor As String)
For Each aRow In DataGridViewX1.Rows
If InStr(aRow.Cells(5).ToString, SearchFor) <> 0 Then
aRow.Cells(5).Selected = True
End If
Next
End Sub
نقل قول: چگونگی جستجو درون یک دیتاگرید
نقل قول:
نوشته شده توسط
Farid.N
دوست عزیز شما به جای MID باید از InStr استفاده کنید هم راحته هم حلقه داخلی حذف می شه!
ون از همه مهمتر اینکه من اصلا متوجه نشدم این تابع شما دنبال چی می گرده
ولی اینو می دونم که اگه یک حرف از سلول گرید با یک حرف از منت تکست باکس مشابه باشن سلول انتخاب میشه (مثلا abcd و dcba باه برابرند!!!)
Sub Find_In_Grid(SearchFor As String)
For Each aRow In DataGridViewX1.Rows
If InStr(aRows(I).Cells(5).ToString, SearchFor) <> 0 Then
Rows(I).Cells(5).Selected = True
End If
Next
End Sub
این کد اینجا خطا می دهد
Error 1 'aRows' is not declared. It may be inaccessible due to its protection level.
نقل قول: چگونگی جستجو درون یک دیتاگرید
برادر من این کد رو بدن تست همینجا نوشتم و یکs(I)
اضافه نوشتم(البته بیشتر واسه اینه که از کد شما رو اصلاح کردم) حالا نمی شد اونو خودت پاک کنی؟!!
بعضی وقتا یه چیزایی می پرسید و می نوسید که آدم می ره تو کما!
(اصلاح شد)
نقل قول: چگونگی جستجو درون یک دیتاگرید
نقل قول:
نوشته شده توسط
Farid.N
من این کد رو بدن تست همینجا نوشتم و یک
s(I)
اضافه نوشتم(البته بیشتر واسه اینه که از کد شما رو اصلاح کردم) حالا نمی شد اونو خودت پاک کنی؟!!
)
با سلام
آدم چیزی رو که بلد نباشه باید بگه من تو این قسمت هنگ کردم و این کدها هم تست کردم جواب نداد
نقل قول: چگونگی جستجو درون یک دیتاگرید
درست شد
Dim p, o AsInteger
Dim db AsString
db = DataGridView1.Rows(i).Cells(a).Value
For p = 1 To Len(db)
For o = 1 To Len(TextBox1.Text)
If Mid(TextBox1.Text, o, 1) = Mid(DataGridView1.Rows(i).Cells(a).Value.ToString, p, 1) Then
DataGridView1.Rows(i).Cells(a).Selected = True
EndIf
Next
Next
مثل ل رو جستجو میکنی که داخل هر قسمتی ل باشه نشون میده
این کد یک یک چک میکنه خودت میتونی بزاری دوتا دوتا len
::چشمک::
نقل قول: چگونگی جستجو درون یک دیتاگرید
این قسمت اشکال داره
db = DataGridViewX1.Rows(i).Cells(a).Value
اون چیزی رو که الان سلکت شده بر می گردونه در صورتی که اون رکوردی رو که می خوایم شاید توی ردیف 50 دیتاگرید باشه
نقل قول: چگونگی جستجو درون یک دیتاگرید
دوست عزیز آیا به دیتاگیرید تون Datasource میدید؟ اگر یک Datatable رو به دیتا سورس بدهید خیلی راحت و بدون صرف وقت زیر 1 میلی ثانیه میشه بین 10000 و بیشتر اطلاعات رو فیلتر کرد!
اگر امکانش هست تعیین کنید که آیا اطلاعات رو از بانک اطلاعاتی وارد دیتاگیرید میکنید؟ و در وحله دوم اگر امکانش هست یک نمونه برنامه بزارید از پرکردن دیتاگیرید تا مشکل رو حل کنم
نقل قول: چگونگی جستجو درون یک دیتاگرید
با سلام
یه پیشنهاد دارم...
یه تابع درون TableAdapter جدول بساز به این مضمون
SELECT * FROM Table1 WHERE Name Like '%' + @Name + '%' And Family Like '%' + @Family + '%'
اگه اسم این تابع بشه FillByNameAndFamily
از این تابع در برنامه بدین نحو استفاده می کنیم
MYTableAdapder1.FillByNameAndFamily(MYDataSet1.Tab le1,NameBox.Text,FamilyBox.Text)
اگر DataGrid به منبع اطلاعات وصل باشه اتوماتیک آیتمهای فیلتر شده نمایش داده می شه در غیر اینصورت ، برای نمایش تمامی آیتمهای جدول با همین فیلتر
With MYDataSet1.Table1
For i=0 to .Count -1
X=.Item(i).Name
Next
End With
به جای X خانه های DataGrid رو وارد کنید
نقل قول: چگونگی جستجو درون یک دیتاگرید
نقل قول:
نوشته شده توسط
morrning
"Select * From Table1 Where Id Like 'N %" + TextBox1.Text + "N %' And Name Like 'N %" + TextBox2.Text + " N%' And Family Like 'N %" + TextBox3.Text + "N %'"
فکر کنم این کد مشکل امنیتی داره کافیه یوزر یه علامت ' وارد کنه و بعد دستور SQL مورد نظرش رو وارد کنه .مطمئن نیستم ولی احتمالا sql injection به وجود بیاد چون ورودی فیلتر نشده!
TextBox1.Text.Replace("'", "''")
با این کد مشکل امنیتش حل نمیشه ?
نقل قول: چگونگی جستجو درون یک دیتاگرید
دوست عزیز درسته این SQL Injection هست و فوق العاده خطرناک اگه مصمم هستید که از این خطر دور بشید باید از دستورات پارامتریک استفاده کنید
یه بررسی تو سایت داشته باشید پیدا می کنید
اون روشی هم که گفتید بدرد نمی خوره!
2 ضمیمه
نقل قول: چگونگی جستجو درون یک دیتاگرید
سلام دوست عزیز پروژت آماده شد .
مطمئنا باگ داره به علت کم بود وقت می سپارمش به دوستان عزیز (Farid-VbBoss , ...)
ضمیمه 86569
[IMG]86570[/IMG]
نقل قول: چگونگی جستجو درون یک دیتاگرید
نقل قول:
نوشته شده توسط
kazemfallahi1371
سلام دوست عزیز پروژت آماده شد .
مطمئنا باگ داره به علت کم بود وقت می سپارمش به دوستان عزیز (Farid-VbBoss , ...)
سلام
بله خواهش می کنم!
اگه جسارت نباشه :
شما در کدتون از For Each استفاده کردید و داخل همون اومدیدی از یه شمارنده (intcount و intcountCell) استفاده کردید
کد نویسی اضافی و تورفتگی غیر لازم دیده می شه
کد شما اگه دقت کرده باشید سلول های خلی رو هم انتخاب می کنه
بنده هم این کد رو پیشنهاد می کنم (چون نخواستم یه پروژه جدید بفرستم جهت تست کد ها رو تو همون پروژه دوستمون با کد های موجود تعویض کنید):
Private Sub FindInGridColumn(SearchFor As String, ColumnName As Integer, Optional WholeWord As Boolean = True)
For Each aRow As DataGridViewRow In Me.DataGridView1.Rows
If WholeWord Then
If CStr(aRow.Cells(ColumnName).Value) = SearchFor Then
aRow.Cells(ColumnName).Selected = True
End If
Else
If InStr(CStr(aRow.Cells(ColumnName).Value), SearchFor, CompareMethod.Text) <> 0 Then
aRow.Cells(ColumnName).Selected = True
End If
End If
Next
End Sub
Private Sub FindAllInGrid(SearchFor As String, Optional WholeWord As Boolean = True)
For Each Clmn As DataGridViewColumn In Me.DataGridView1.Columns
FindInGridColumn(SearchFor, Clmn.Index, WholeWord)
Next
End Sub
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
DataGridView1.SelectionMode = DataGridViewSelectionMode.CellSelect
DataGridView1.ClearSelection()
FindAllInGrid(TextBox1.Text, RadioButton1.Checked)
End Sub
Private Sub Button2_Click(sender As System.Object, e As System.EventArgs) Handles Button2.Click
Try
DataGridView1.SelectionMode = DataGridViewSelectionMode.CellSelect
DataGridView1.ClearSelection()
Dim clmn = Me.DataGridView1.Columns(TextBox2.Text)
FindInGridColumn(TextBox3.Text, clmn.Index, RadioButton1.Checked)
Catch ex As Exception
End Try
End Sub