با سلام
آيا مي شود جستجو را بر اساس انتخاب نام جدول كه كاربر انجام ميدهد (مثلا از Combobox)انجام داد؟
و چگونه دستورش مي باشد؟
Printable View
با سلام
آيا مي شود جستجو را بر اساس انتخاب نام جدول كه كاربر انجام ميدهد (مثلا از Combobox)انجام داد؟
و چگونه دستورش مي باشد؟
سوالتان واضح نیست ، در هر صورت کار نشد ندارد
اگر منظورتان این است که یک جدول دارید که حاوی مجموعه ای از داده هاست و میخواهید آنرا به یک کمبو بایند کرده و در کمبو امکان جستجو را هم داشته باشید ، بلی . کافی است دو خصیصه AutoComplet Mode و AutoComplete Source را به مقادیر مورد نظر خود تنظیم نمایید .
ولی اگر منظورتان این است که میخواهید از یک کمبو نام جدول را انتخاب نمایید و بعد جستجو انجام دهید ، بلی باز هم میشود ولی حداقل یک تصویر از Interface برنامه تان را بگذارید تا بر اساس نیاز شما توضیح داده شود .
مرسي از توضيحتون
من دقيقا منظورم همين ايه كه شما فرموديد:
اينم عكس:( از قسمت بخش اين پايين نام جدول در Combobox قررار ميگيره)نقل قول:
میخواهید از یک کمبو نام جدول را انتخاب نمایید و بعد جستجو انجام دهید ، بلی باز هم میشود ولی حداقل یک تصویر از Interface برنامه تان را بگذارید تا بر اساس نیاز شما توضیح داده شود .
[ برای مشاهده لینک ، با نام کاربری خود وارد شوید یا ثبت نام کنید ]
براي جستجوي معمولي فقط شماره شناسايي داريم.
سلام
میبخشید این چند وقته خیلی کار داشتم ، ظاهرا خیلی دیر کردم
راستش هنوز هم وقت نکردم اون چیزی رو که میخواین رو بنویسم ولی یادم آمد چندی پیش به دنبال ایجاد کلاسی (ارث برده شده از DataGridView) بودم که بجای DataGrid از آن استفاده کنم و کاربران هم بتوانند به راحتی در آن جستجو کنند .
سورس کلاس شما را در رسیدن به هدفتان کمک میکند ، ابتدا یک کلاس خالی ایجاد کنید و کد ذیل را در آن قرار دهید . سپس پروژه را Build کرده و یک فرم جدید ایجاد کنید و کنترلی تحت عنوان Class1 را بر روی فرم کشیده و ...
کد:Public Class Class1
Inherits System.Windows.Forms.DataGridView
Private _SearchTextArray() As System.Windows.Forms.TextBox
Public Event Search(ByVal e As System.Windows.Forms.DataGridViewColumn, ByVal SearchString As String)
Private Sub Class1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Click
For i As Integer = 0 To _SearchTextArray.Count - 1
_SearchTextArray(i).Visible = Not _SearchTextArray(i).Visible
Next
End Sub
Private Sub Class1_ColumnAdded(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewColumnEventArgs) Handles Me.ColumnAdded
Refresh()
End Sub
Public Overrides Sub Refresh()
MyBase.Refresh()
If Not IsNothing(_SearchTextArray) Then
For i As Integer = 0 To _SearchTextArray.Count - 1
_SearchTextArray(i).Dispose()
Next
End If
ReDim _SearchTextArray(Me.ColumnCount - 1)
Dim LeftColumn As Integer = IIf(ColumnHeadersVisible Or AllowUserToAddRows, 41, 0)
For i As Integer = 0 To Me.ColumnCount - 1
_SearchTextArray(i) = New System.Windows.Forms.TextBox
_SearchTextArray(i).Top = 0
_SearchTextArray(i).Width = Me.Columns(i).Width
_SearchTextArray(i).Left = LeftColumn
LeftColumn += Me.Columns(i).Width
MyBase.Controls.Add(_SearchTextArray(i))
_SearchTextArray(i).Visible = False
AddHandler _SearchTextArray(i).TextChanged, AddressOf TextChange
Next
End Sub
Private Sub Class1_ColumnWidthChanged(ByVal sender As Object, ByVal e As System.Windows.Forms.DataGridViewColumnEventArgs) Handles Me.ColumnWidthChanged
Refresh()
End Sub
Public Sub TextChange(ByVal sender As Object, ByVal e As System.EventArgs)
Dim bs As System.Windows.Forms.BindingSource = Me.DataSource
Dim dt As DataTable = CType(bs.DataSource, DataSet).Tables(0)
Dim FilterString As String = ""
For i As Integer = 0 To _SearchTextArray.Count - 1
If dt.Columns(i).DataType.Name = "String" Then
' End If
If FilterString.Trim <> "" Then FilterString += " and "
FilterString += "[" & dt.Columns(i).ColumnName & "] Like '%" & _SearchTextArray(i).Text & "%'"
Else
If _SearchTextArray(i).Text.Trim <> "" Then
_SearchTextArray(i).BackColor = Drawing.Color.Gray
If FilterString.Trim <> "" Then FilterString += " and "
FilterString += "[" & dt.Columns(i).ColumnName & "] = '" & _SearchTextArray(i).Text & "'"
End If
End If
Next
bs.Filter = FilterString
End Sub
Private Sub InitializeComponent()
CType(Me, System.ComponentModel.ISupportInitialize).BeginInit()
Me.SuspendLayout()
'
'Class1
'
CType(Me, System.ComponentModel.ISupportInitialize).EndInit()
Me.ResumeLayout(False)
End Sub
End Class