نمایش نتایج 1 تا 2 از 2

نام تاپیک: Column Type جدید برای datagridview

  1. #1
    کاربر دائمی
    تاریخ عضویت
    مرداد 1385
    محل زندگی
    کرمانشاه
    پست
    398

    Column Type جدید برای datagridview

    سلام
    من یک Autocompletetextbox سفارشی درست کردم
    که خودش بدون مشکل کار میکنه. حالا میخوام اونوبه عنوان یک ستون توی دیتا گرید استفادش کنم . اول اونو به عنوان یک نوع ستون مشخص کردم :


    Imports System
    Imports System.Windows.Forms
    Public Class DatagridviewAutocompleteTextboxColumn
    Inherits DataGridViewColumn

    Public Sub New()
    MyBase.New(New DataGridViewAutocompleteTextBoxCell())
    End Sub

    Dim _MelocationX As Integer
    Dim _MelocationY As Integer
    Dim _Desktoplocation As New Point
    Dim _HasData As Boolean = False
    Dim _FontIsBold As Boolean = False
    Dim _RowID As Integer
    Dim _MyparentForm As Form
    Dim _MeForm As Windows.Forms.Form
    Dim _forControl As Control
    Dim _DataTableList As New DataTable
    Dim _SearchFiledName As String
    Dim _DispalyFieldName As String

    Public Property MeLocationX As Integer
    Get
    Return _MelocationX
    End Get
    Set(value As Integer)
    _MelocationX = value
    End Set
    End Property
    Public Property MeLocationY As Integer
    Get
    Return _MelocationY
    End Get
    Set(value As Integer)
    _MelocationY = value
    End Set
    End Property
    Public Property DesktopLocation As Point
    Get
    Return Me._Desktoplocation
    End Get
    Set(value As Point)
    Me._Desktoplocation = value
    End Set
    End Property
    Public Property ParentForm As Form
    Get
    Return Me._MyparentForm
    End Get
    Set(value As Form)
    _MyparentForm = value
    Me._MeForm = _MyparentForm
    End Set
    End Property
    Public Property forControl As Control
    Get
    Return _forControl
    End Get
    Set(value As Control)
    _forControl = value
    End Set
    End Property

    Public ReadOnly Property HasData() As Boolean
    Get
    Return Me._HasData
    End Get
    End Property
    Public Property DataTableList()
    Get
    Return Me._DataTableList
    End Get
    Set(ByVal value)
    Me._DataTableList = value
    Me._SearchFiledName = Me._DataTableList.Columns(0).ColumnName
    Me._DispalyFieldName = Me._DataTableList.Columns(1).ColumnName

    End Set
    End Property
    Public Property RowID()
    Get
    Return Me._RowID
    End Get
    Set(ByVal value)
    Me._RowID = value
    End Set
    End Property
    Public Property FontIsBols() As Boolean
    Get
    Return Me._FontIsBold
    End Get
    Set(ByVal value As Boolean)
    Me._FontIsBold = value
    End Set
    End Property


    Public Overrides Function Clone() As Object
    Dim col As DatagridviewAutocompleteTextboxColumn = CType(MyBase.Clone(), DatagridviewAutocompleteTextboxColumn)
    Return col
    End Function


    Public Overrides Property CellTemplate() As DataGridViewCell
    Get
    Return MyBase.CellTemplate
    End Get
    Set(ByVal value As DataGridViewCell)
    If Not TypeOf value Is DataGridViewAutocompleteTextBoxCell Then
    Throw New InvalidCastException("DataGridViewAutocompleteText BoxCell" + "")
    End If
    MyBase.CellTemplate = value
    End Set
    End Property

    End Class
    Public Class DataGridViewAutocompleteTextBoxCell
    Inherits DataGridViewTextBoxCell

    Public Sub New()
    End Sub

    Public Overrides Sub InitializeEditingControl(ByVal rowIndex As Integer, ByVal initialFormattedValue As Object, ByVal dataGridViewCellStyle As DataGridViewCellStyle)

    MyBase.InitializeEditingControl(rowIndex, initialFormattedValue, dataGridViewCellStyle)

    Dim autocomplete As DataGridViewAutocompleteTextBoxEditingControl =
    Me.DataGridView.EditingControl
    If Not (autocomplete Is Nothing) Then
    ' maskedBox.Text = IIf(Me.Value Is Nothing, "", Me.Value.ToString())
    Dim column As DatagridviewAutocompleteTextboxColumn = Me.OwningColumn
    'If Not (column Is Nothing) Then
    ' maskedBox.Mask = column.Mask
    'End If
    End If
    End Sub
    Public Overrides ReadOnly Property EditType() As Type
    Get
    Return GetType(DataGridViewAutocompleteTextBoxEditingCont rol)
    End Get
    End Property
    Public Overrides ReadOnly Property ValueType() As Type
    Get
    Return GetType(Object)
    End Get
    End Property
    Public Overrides ReadOnly Property DefaultNewRowValue() As Object
    Get
    Return MyBase.DefaultNewRowValue
    End Get
    End Property
    End Class
    Public Class DataGridViewAutocompleteTextBoxEditingControl
    Inherits AutoCompleteTextBoxSample.AutoCompleteTextbox
    Implements IDataGridViewEditingControl
    Private dataGridView As DataGridView
    Private rowIndex As Integer
    Private valueChanged As Boolean

    Public Sub New()
    Me.TabStop = False
    End Sub

    Public Function GetEditingControlFormattedValue(
    ByVal context As DataGridViewDataErrorContexts) As Object _
    Implements IDataGridViewEditingControl.GetEditingControlForma ttedValue

    Return Me.Text
    End Function

    Public Property EditingControlFormattedValue() As Object _
    Implements IDataGridViewEditingControl.EditingControlFormatte dValue
    Get
    Return Me.GetEditingControlFormattedValue(
    DataGridViewDataErrorContexts.Formatting)
    End Get
    Set(ByVal value As Object)
    Me.Text = CStr(value)
    End Set
    End Property
    Public Sub ApplyCellStyleToEditingControl(
    ByVal dataGridViewCellStyle As DataGridViewCellStyle) _
    Implements IDataGridViewEditingControl.ApplyCellStyleToEditin gControl

    Me.TextAlign = HorizontalAlignment.Left
    Me.Font = dataGridViewCellStyle.Font
    Me.ForeColor = dataGridViewCellStyle.ForeColor
    Me.BackColor = dataGridViewCellStyle.BackColor
    End Sub
    Public Property EditingControlDataGridView() As DataGridView _
    Implements IDataGridViewEditingControl.EditingControlDataGrid View
    Get
    Return Me.dataGridView
    End Get
    Set(ByVal value As DataGridView)
    Me.dataGridView = value
    End Set
    End Property
    Public Property EditingControlRowIndex() As Integer _
    Implements IDataGridViewEditingControl.EditingControlRowIndex
    Get
    Return Me.rowIndex
    End Get
    Set(ByVal value As Integer)
    Me.rowIndex = value
    End Set
    End Property

    Public Property EditingControlValueChanged() As Boolean _
    Implements IDataGridViewEditingControl.EditingControlValueCha nged
    Get
    Return Me.valueChanged
    End Get
    Set(ByVal value As Boolean)
    Me.valueChanged = value
    End Set
    End Property
    Public Function EditingControlWantsInputKey(ByVal keyData As Keys,
    ByVal dataGridViewWantsInputKey As Boolean) As Boolean _
    Implements IDataGridViewEditingControl.EditingControlWantsInp utKey

    Select Case keyData And Keys.KeyCode
    Case Keys.Right, Keys.End, Keys.Left, Keys.Home
    Return True
    Case Else
    Return False
    End Select
    End Function
    Public ReadOnly Property EditingPanelCursor() As Cursor _
    Implements IDataGridViewEditingControl.EditingPanelCursor
    Get
    Return MyBase.Cursor
    End Get
    End Property
    Public Sub PrepareEditingControlForEdit(ByVal selectAll As Boolean) _
    Implements IDataGridViewEditingControl.PrepareEditingControlF orEdit

    If selectAll Then
    Me.SelectAll()
    Else
    Me.SelectionStart = Me.TextLength
    End If
    End Sub
    Public ReadOnly Property RepositionEditingControlOnValueChange() _
    As Boolean _
    Implements _
    IDataGridViewEditingControl.RepositionEditingContr olOnValueChange
    Get
    Return False
    End Get
    End Property
    Protected Overrides Sub OnTextChanged(ByVal e As EventArgs)
    MyBase.OnTextChanged(e)
    Me.valueChanged = True
    Me.dataGridView.NotifyCurrentCellDirty(True)
    End Sub
    End Class










    بعدش با استفاده از :


    Private Sub MyDataGridView1_EditingControlShowing(sender As Object, e As DataGridViewEditingControlShowingEventArgs) Handles MyDataGridView1.EditingControlShowing

    Dim AutocompletePerson As AutoCompleteTextBoxSample.AutoCompleteTextbox = TryCast(e.Control, AutoCompleteTextBoxSample.AutoCompleteTextbox)

    Dim dt As New DataTable
    dt = clsPerson.PersonAutocomplete
    For Each dr As DataRow In dt.Rows
    source.Add(dr("fldname"))
    Next
    AutocompletePerson.AutoCompleteList = source
    End Sub




    اونو توی دیتاگرید استفاده می کنم . درست کار میکنه فقط یک مشکل داره با کلیدهای بالا و پایین . ینی وقتی لیست باز میشه که ازش انتخاب بکنم و کلید های بالا و پایین رو میزنم لیست بسته میشه و و دوباره روی سلول دیتا گرید میاد .
    چیکارش کنم که وقتی لیست باز میشه تا کلید اینتر برای انتخاب از لیست یا کلید esc برای صرفنظر رو نزدم بسته نشه؟

  2. #2

    نقل قول: Column Type جدید برای datagridview

    نقل قول نوشته شده توسط hooooman مشاهده تاپیک
    سلام
    من یک Autocompletetextbox سفارشی درست کردم
    که خودش بدون مشکل کار میکنه. حالا میخوام اونوبه عنوان یک ستون توی دیتا گرید استفادش کنم . اول اونو به عنوان یک نوع ستون مشخص کردم :


    Imports System
    Imports System.Windows.Forms
    Public Class DatagridviewAutocompleteTextboxColumn
    Inherits DataGridViewColumn

    Public Sub New()
    MyBase.New(New DataGridViewAutocompleteTextBoxCell())
    End Sub

    Dim _MelocationX As Integer
    Dim _MelocationY As Integer
    Dim _Desktoplocation As New Point
    Dim _HasData As Boolean = False
    Dim _FontIsBold As Boolean = False
    Dim _RowID As Integer
    Dim _MyparentForm As Form
    Dim _MeForm As Windows.Forms.Form
    Dim _forControl As Control
    Dim _DataTableList As New DataTable
    Dim _SearchFiledName As String
    Dim _DispalyFieldName As String

    Public Property MeLocationX As Integer
    Get
    Return _MelocationX
    End Get
    Set(value As Integer)
    _MelocationX = value
    End Set
    End Property
    Public Property MeLocationY As Integer
    Get
    Return _MelocationY
    End Get
    Set(value As Integer)
    _MelocationY = value
    End Set
    End Property
    Public Property DesktopLocation As Point
    Get
    Return Me._Desktoplocation
    End Get
    Set(value As Point)
    Me._Desktoplocation = value
    End Set
    End Property
    Public Property ParentForm As Form
    Get
    Return Me._MyparentForm
    End Get
    Set(value As Form)
    _MyparentForm = value
    Me._MeForm = _MyparentForm
    End Set
    End Property
    Public Property forControl As Control
    Get
    Return _forControl
    End Get
    Set(value As Control)
    _forControl = value
    End Set
    End Property

    Public ReadOnly Property HasData() As Boolean
    Get
    Return Me._HasData
    End Get
    End Property
    Public Property DataTableList()
    Get
    Return Me._DataTableList
    End Get
    Set(ByVal value)
    Me._DataTableList = value
    Me._SearchFiledName = Me._DataTableList.Columns(0).ColumnName
    Me._DispalyFieldName = Me._DataTableList.Columns(1).ColumnName

    End Set
    End Property
    Public Property RowID()
    Get
    Return Me._RowID
    End Get
    Set(ByVal value)
    Me._RowID = value
    End Set
    End Property
    Public Property FontIsBols() As Boolean
    Get
    Return Me._FontIsBold
    End Get
    Set(ByVal value As Boolean)
    Me._FontIsBold = value
    End Set
    End Property


    Public Overrides Function Clone() As Object
    Dim col As DatagridviewAutocompleteTextboxColumn = CType(MyBase.Clone(), DatagridviewAutocompleteTextboxColumn)
    Return col
    End Function


    Public Overrides Property CellTemplate() As DataGridViewCell
    Get
    Return MyBase.CellTemplate
    End Get
    Set(ByVal value As DataGridViewCell)
    If Not TypeOf value Is DataGridViewAutocompleteTextBoxCell Then
    Throw New InvalidCastException("DataGridViewAutocompleteText BoxCell" + "")
    End If
    MyBase.CellTemplate = value
    End Set
    End Property

    End Class
    Public Class DataGridViewAutocompleteTextBoxCell
    Inherits DataGridViewTextBoxCell

    Public Sub New()
    End Sub

    Public Overrides Sub InitializeEditingControl(ByVal rowIndex As Integer, ByVal initialFormattedValue As Object, ByVal dataGridViewCellStyle As DataGridViewCellStyle)

    MyBase.InitializeEditingControl(rowIndex, initialFormattedValue, dataGridViewCellStyle)

    Dim autocomplete As DataGridViewAutocompleteTextBoxEditingControl =
    Me.DataGridView.EditingControl
    If Not (autocomplete Is Nothing) Then
    ' maskedBox.Text = IIf(Me.Value Is Nothing, "", Me.Value.ToString())
    Dim column As DatagridviewAutocompleteTextboxColumn = Me.OwningColumn
    'If Not (column Is Nothing) Then
    ' maskedBox.Mask = column.Mask
    'End If
    End If
    End Sub
    Public Overrides ReadOnly Property EditType() As Type
    Get
    Return GetType(DataGridViewAutocompleteTextBoxEditingCont rol)
    End Get
    End Property
    Public Overrides ReadOnly Property ValueType() As Type
    Get
    Return GetType(Object)
    End Get
    End Property
    Public Overrides ReadOnly Property DefaultNewRowValue() As Object
    Get
    Return MyBase.DefaultNewRowValue
    End Get
    End Property
    End Class
    Public Class DataGridViewAutocompleteTextBoxEditingControl
    Inherits AutoCompleteTextBoxSample.AutoCompleteTextbox
    Implements IDataGridViewEditingControl
    Private dataGridView As DataGridView
    Private rowIndex As Integer
    Private valueChanged As Boolean

    Public Sub New()
    Me.TabStop = False
    End Sub

    Public Function GetEditingControlFormattedValue(
    ByVal context As DataGridViewDataErrorContexts) As Object _
    Implements IDataGridViewEditingControl.GetEditingControlForma ttedValue

    Return Me.Text
    End Function

    Public Property EditingControlFormattedValue() As Object _
    Implements IDataGridViewEditingControl.EditingControlFormatte dValue
    Get
    Return Me.GetEditingControlFormattedValue(
    DataGridViewDataErrorContexts.Formatting)
    End Get
    Set(ByVal value As Object)
    Me.Text = CStr(value)
    End Set
    End Property
    Public Sub ApplyCellStyleToEditingControl(
    ByVal dataGridViewCellStyle As DataGridViewCellStyle) _
    Implements IDataGridViewEditingControl.ApplyCellStyleToEditin gControl

    Me.TextAlign = HorizontalAlignment.Left
    Me.Font = dataGridViewCellStyle.Font
    Me.ForeColor = dataGridViewCellStyle.ForeColor
    Me.BackColor = dataGridViewCellStyle.BackColor
    End Sub
    Public Property EditingControlDataGridView() As DataGridView _
    Implements IDataGridViewEditingControl.EditingControlDataGrid View
    Get
    Return Me.dataGridView
    End Get
    Set(ByVal value As DataGridView)
    Me.dataGridView = value
    End Set
    End Property
    Public Property EditingControlRowIndex() As Integer _
    Implements IDataGridViewEditingControl.EditingControlRowIndex
    Get
    Return Me.rowIndex
    End Get
    Set(ByVal value As Integer)
    Me.rowIndex = value
    End Set
    End Property

    Public Property EditingControlValueChanged() As Boolean _
    Implements IDataGridViewEditingControl.EditingControlValueCha nged
    Get
    Return Me.valueChanged
    End Get
    Set(ByVal value As Boolean)
    Me.valueChanged = value
    End Set
    End Property
    Public Function EditingControlWantsInputKey(ByVal keyData As Keys,
    ByVal dataGridViewWantsInputKey As Boolean) As Boolean _
    Implements IDataGridViewEditingControl.EditingControlWantsInp utKey

    Select Case keyData And Keys.KeyCode
    Case Keys.Right, Keys.End, Keys.Left, Keys.Home
    Return True
    Case Else
    Return False
    End Select
    End Function
    Public ReadOnly Property EditingPanelCursor() As Cursor _
    Implements IDataGridViewEditingControl.EditingPanelCursor
    Get
    Return MyBase.Cursor
    End Get
    End Property
    Public Sub PrepareEditingControlForEdit(ByVal selectAll As Boolean) _
    Implements IDataGridViewEditingControl.PrepareEditingControlF orEdit

    If selectAll Then
    Me.SelectAll()
    Else
    Me.SelectionStart = Me.TextLength
    End If
    End Sub
    Public ReadOnly Property RepositionEditingControlOnValueChange() _
    As Boolean _
    Implements _
    IDataGridViewEditingControl.RepositionEditingContr olOnValueChange
    Get
    Return False
    End Get
    End Property
    Protected Overrides Sub OnTextChanged(ByVal e As EventArgs)
    MyBase.OnTextChanged(e)
    Me.valueChanged = True
    Me.dataGridView.NotifyCurrentCellDirty(True)
    End Sub
    End Class










    بعدش با استفاده از :


    Private Sub MyDataGridView1_EditingControlShowing(sender As Object, e As DataGridViewEditingControlShowingEventArgs) Handles MyDataGridView1.EditingControlShowing

    Dim AutocompletePerson As AutoCompleteTextBoxSample.AutoCompleteTextbox = TryCast(e.Control, AutoCompleteTextBoxSample.AutoCompleteTextbox)

    Dim dt As New DataTable
    dt = clsPerson.PersonAutocomplete
    For Each dr As DataRow In dt.Rows
    source.Add(dr("fldname"))
    Next
    AutocompletePerson.AutoCompleteList = source
    End Sub




    اونو توی دیتاگرید استفاده می کنم . درست کار میکنه فقط یک مشکل داره با کلیدهای بالا و پایین . ینی وقتی لیست باز میشه که ازش انتخاب بکنم و کلید های بالا و پایین رو میزنم لیست بسته میشه و و دوباره روی سلول دیتا گرید میاد .
    چیکارش کنم که وقتی لیست باز میشه تا کلید اینتر برای انتخاب از لیست یا کلید esc برای صرفنظر رو نزدم بسته نشه؟

    کد اون AutoCompleteTextbox رو نمی بینم. داخل کلاسش برای ProcessCmdKey مشخص کنید که این دو تا کلید رو خودم میخوام پردازش کنم تا اونها رو تحویل DataGridView نده.

    Protected Overrides Function ProcessCmdKey(ByRef msg As Message, keyData As Keys) As Boolean
    Select case keyData
    Case Keys.Up
    ' your code
    Return True
    Case Keys.Down
    ' your code
    Return True
    End Select
    Return MyBase.ProcessCmdKey(msg, keyData)
    End Function

تاپیک های مشابه

  1. سوال: ایجاد یک button column در datagridview
    نوشته شده توسط systam در بخش C#‎‎
    پاسخ: 0
    آخرین پست: شنبه 27 شهریور 1395, 17:18 عصر
  2. آموزش: پرینت گرفتن از چند Column خاص از DataGridView
    نوشته شده توسط c-sharp_South در بخش C#‎‎
    پاسخ: 1
    آخرین پست: دوشنبه 16 بهمن 1391, 09:32 صبح
  3. فرمت تاریخ در یک column از datagridview
    نوشته شده توسط saeedhushmand در بخش C#‎‎
    پاسخ: 2
    آخرین پست: جمعه 31 شهریور 1391, 16:12 عصر
  4. Syntax error converting the nvarchar value '78-66' to a column of data type int
    نوشته شده توسط msoleiman در بخش دسترسی به داده ها (ADO.Net و LINQ و ...)
    پاسخ: 5
    آخرین پست: جمعه 27 دی 1387, 11:47 صبح
  5. نحوه چند خطی کردن Column در DataGridView
    نوشته شده توسط محمد میرمصطفی در بخش C#‎‎
    پاسخ: 3
    آخرین پست: سه شنبه 18 بهمن 1384, 14:01 عصر

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •