请帮助我!!!!!!!!!!!!!!!!!!!!! [英] Pls help me!!!!!!!!!!!!!!!!!!!!!
问题描述
I
在VB中成功创建了ComboBox Column控件.但我想要
通过传递一个基于我的需求的列表项到数据库
查询或按列表对象.我想知道如何初始化ComboxCell
在运行时列出项目.
以下是代码:
导入System.Collections.Generic
导入System.Text
导入System.Windows.Forms
公共类ComboBoxColumn
继承DataGridViewColumn
Public Sub New(ByVal strQuery As String)
MyBase.New(New ComboBoxCell())
End Sub
Public Overrides Property CellTemplate()as DataGridViewCell
Get
返回MyBase.CellTemplate
End Get
Set(ByVal值为DataGridViewCell)
的值(不是)(不是)(得到)(类型为.) (ComboBoxCell))_
然后
抛出新的InvalidCastException(``必须是ComboBoxCell'')结束类
公共类ComboBoxCell
继承DataGridViewTextBoxCell
Public Sub New()
结束子
Public Overrides Sub InitializeEditingControl(ByVal rowIndex As Integer,_
ByVal initialFormattedValue As Object,_
ByVal dataGridViewCellStyle As DataGridViewCellStyle)
MyBase.InitializeEditingControl(mIndex) .EditingControl
End Sub
公共重写ReadOnly属性EditType()作为Type
Get
Get
返回ComboBoxCell使用的编辑控件的类型. br> End Get
End Property
Public重写ReadOnly属性ValueType()作为Type
返回值ComboBoxCell包含的值的类型.
End Get
最终属性
公共替代ReadOnly属性DefaultNewRowValue()作为对象
Get
返回<结束Get
结束属性
结束类
公共类ComboBoxEditingControl
继承ComboBox
将IDataGridViewEditingControl
实现为整数. DataGridView
受保护的值更改为布尔值= False
Public Sub New()
End Sub
受保护的重写Sub OnTextChanged(作为EventArgs的ByVal e)
)
MyBase.OnTextChanged(e)
End Sub
受保护的可重写子NotifyDataGridViewOfValueChange()<.dataGridView.NotifyCurrentCellDirty(True)
End If
End Sub
公共只读属性EditingPanelCursor()为 System.Windows.Forms.Cursor实现 System.Windows.Forms.IDataGridViewEditingControl.EditingPanelCursor
返回Cursors.IBeam
最终Get
最终属性
>返回MyBase.Cursor
End Get
End Property
公共属性EditingControlDataGridView()as DataGridView _
Set(ByVal值作为System.Windows.Forms.DataGridView)
dataGridView =值
End Set
End Property
对象实现时的公共属性EditingControlFormattedValue() System.Windows.Forms.IDataGridViewEditingControl.EditingControlFormattedValue
返回Me.Text
Set(按对象作为对象的Val值)值=文本)
结束集
结束属性
公共函数GetEditingControlFormattedValue(ByVal上下文为 System.Windows.Forms.DataGridViewDataErrorContexts)作为对象 机具 System.Windows.Forms.IDataGridViewEditingControl.GetEditingControlFormattedValue
返回Me.Text >实施IDataGridViewEditingControl.EditingControlWantsInputKey
选择大小写键和键.结束如果
区分大小写.左<>>如果Me.SelectionLength = 0和Me.SelectionStart = 0则
Me.SelectionLength<> Me.Text.Length然后点击返回true结果结束如果点击案例Keys.Prior,Keys.Next结果如果Me.valueChanged然后点击返回true结果结束如果点击案例键删除
如果Me.SelectionLength> 0 And Me.SelectionStart< Me.Text.Length然后
返回True
End If
End Case
Case Else
布尔值
<返回)__
实施IDataGridViewEditingControl.PrepareEditingControlForEdit
如果selectAll然后
Me.SelectAll() br>
Public ReadOnly属性RepositionEditingControlOnValueChange()_
作为布尔实现_
IDataGridViewEditingControl.RepositionEditingControlOnValueChange
公共属性EditingControlRowIndex()以整数_
实现IDataGridViewEditingControl.EditingControlRowIndex
返回RowIndex
设置(ByVal值作为整数)
rowIndex =值
结束集
结束属性
Public Sub ApplyCellStyleToEditingControl(ByVal dataGridViewCellStyle作为_
控件 Style
Me.Font = dataGridViewCellStyle.Font
Me.ForeColor = dataGridViewCellStyle.ForeColor
Me.BackColor = dataGridViewCellStyle.BackColor
End Sub
实施IDataGridViewEditingControl.EditingControlValueChanged
Get
Get
End Get
Set(ByVal值为布尔值) br>私有共享函数translateAlignment(ByVal Align As DataGridViewContentAlignment)As HorizontalAlignment
选择大小写align
案例DataGridViewContentAlignment.TopLeft, DataGridViewContentAlignment.MiddleLeft, DataGridViewContentAlignment.BottomLeft
返回HorizontalAlignment.Left
案例DataGridViewContentAlignment.TopCenter, DataGridViewContentAlignment.MiddleCenter, DataGridViewContentAlignment.BottomCenter
返回ReturnHorizontalAlignment.Center
案例DataGridViewContentAlignment.TopRight, DataGridViewContentAlignment.MiddleRight, DataGridViewContentAlignment.BottomRight
返回ReturnHorizontalAlignment.Right
End Select
引发New ArgumentException(错误:无效的内容对齐")
<
根据您的帖子,您成功在VB中创建了一个ComboBox Column控件.但是你想要 通过传递一个基于我的需求的列表项到数据库 查询或按列表对象.我想知道如何初始化ComboxCell 在运行时列出项目.
您需要设置数据源或将其项目填充到相应的DataGridViewComboBoxColumn对象中,以实现您的要求.
I
have successfully created a ComboBox Column control in VB. But i want
to load list items based on my requirements thro database by passing a
query or by list object. I want to know how to initialize ComboxCell
list items at run time.
Here is the Code:
Imports System.Collections.Generic
Imports System.Text
Imports System.Windows.Forms
Public Class ComboBoxColumn
Inherits DataGridViewColumn
Public Sub New(ByVal strQuery As String)
MyBase.New(New ComboBoxCell())
End Sub
Public Overrides Property CellTemplate() As DataGridViewCell
Get
Return MyBase.CellTemplate
End Get
Set(ByVal value As DataGridViewCell)
If Not (value Is Nothing) AndAlso _
Not value.GetType().IsAssignableFrom(GetType(ComboBoxCell)) _
Then
Throw New InvalidCastException("Must be a ComboBoxCell")
End If
MyBase.CellTemplate = value
End Set
End Property
End Class
Public Class ComboBoxCell
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 ctl As ComboBoxEditingControl = DataGridView.EditingControl
End Sub
Public Overrides ReadOnly Property EditType() As Type
Get
' Return the type of the editing contol that ComboBoxCell uses.
Return GetType(ComboBoxEditingControl)
End Get
End Property
Public Overrides ReadOnly Property ValueType() As Type
Get
' Return the type of the value that ComboBoxCell contains.
Return GetType(String)
End Get
End Property
Public Overrides ReadOnly Property DefaultNewRowValue() As Object
Get
Return ""
End Get
End Property
End Class
Public Class ComboBoxEditingControl
Inherits ComboBox
Implements IDataGridViewEditingControl
Protected rowIndex As Integer
Protected dataGridView As DataGridView
Protected valueChanged As Boolean = False
Public Sub New()
End Sub
Protected Overrides Sub OnTextChanged(ByVal e As EventArgs)
NotifyDataGridViewOfValueChange()
MyBase.OnTextChanged(e)
End Sub
Protected Overridable Sub NotifyDataGridViewOfValueChange()
Me.valueChanged = True
If Not Me.dataGridView Is Nothing Then
Me.dataGridView.NotifyCurrentCellDirty(True)
End If
End Sub
Public ReadOnly Property EditingPanelCursor() As System.Windows.Forms.Cursor Implements System.Windows.Forms.IDataGridViewEditingControl.EditingPanelCursor
Get
Return Cursors.IBeam
End Get
End Property
Public ReadOnly Property EditingControlCursor() As Cursor
Get
Return MyBase.Cursor
End Get
End Property
Public Property EditingControlDataGridView() As DataGridView _
Implements IDataGridViewEditingControl.EditingControlDataGridView
Get
Return dataGridView
End Get
Set(ByVal value As System.Windows.Forms.DataGridView)
dataGridView = value
End Set
End Property
Public Property EditingControlFormattedValue() As Object Implements System.Windows.Forms.IDataGridViewEditingControl.EditingControlFormattedValue
Get
Return Me.Text
End Get
Set(ByVal value As Object)
Me.Text = value.ToString
NotifyDataGridViewOfValueChange()
End Set
End Property
Public Function GetEditingControlFormattedValue(ByVal context As System.Windows.Forms.DataGridViewDataErrorContexts) As Object Implements System.Windows.Forms.IDataGridViewEditingControl.GetEditingControlFormattedValue
Return Me.Text
End Function
Public Function EditingControlWantsInputKey(ByVal key As Keys, _
ByVal dataGridViewWantsInputKey As Boolean) As Boolean _
Implements IDataGridViewEditingControl.EditingControlWantsInputKey
Select Case key And Keys.KeyCode
Case Keys.Right
If Me.SelectionLength = 0 And Me.SelectionStart = Me.Text.Length Then
Return True
End If
Case Keys.Left
If Me.SelectionLength = 0 And Me.SelectionStart = 0 Then
Return True
End If
Case Keys.Home, Keys.End
If Me.SelectionLength <> Me.Text.Length Then
Return True
End If
Case Keys.Prior, Keys.Next
If Me.valueChanged Then
Return True
End If
Case Keys.Delete
If Me.SelectionLength > 0 And Me.SelectionStart < Me.Text.Length Then
Return True
End If
Case Else
Return dataGridViewWantsInputKey
End Select
End Function
Public Sub PrepareEditingControlForEdit(ByVal selectAll As Boolean) _
Implements IDataGridViewEditingControl.PrepareEditingControlForEdit
If selectAll Then
Me.SelectAll()
Else
Me.SelectionStart = Me.Text.Length
End If
End Sub
Public ReadOnly Property RepositionEditingControlOnValueChange() _
As Boolean Implements _
IDataGridViewEditingControl.RepositionEditingControlOnValueChange
Get
Return False
End Get
End Property
Public Property EditingControlRowIndex() As Integer _
Implements IDataGridViewEditingControl.EditingControlRowIndex
Get
Return rowIndex
End Get
Set(ByVal value As Integer)
rowIndex = value
End Set
End Property
Public Sub ApplyCellStyleToEditingControl(ByVal dataGridViewCellStyle As _
DataGridViewCellStyle) _
Implements IDataGridViewEditingControl.ApplyCellStyleToEditingControl
Me.Font = dataGridViewCellStyle.Font
Me.ForeColor = dataGridViewCellStyle.ForeColor
Me.BackColor = dataGridViewCellStyle.BackColor
End Sub
Public Property EditingControlValueChanged() As Boolean _
Implements IDataGridViewEditingControl.EditingControlValueChanged
Get
Return valueChanged
End Get
Set(ByVal value As Boolean)
valueChanged = value
End Set
End Property
Private Shared Function translateAlignment(ByVal align As DataGridViewContentAlignment) As HorizontalAlignment
Select Case align
Case DataGridViewContentAlignment.TopLeft, DataGridViewContentAlignment.MiddleLeft, DataGridViewContentAlignment.BottomLeft
Return HorizontalAlignment.Left
Case DataGridViewContentAlignment.TopCenter, DataGridViewContentAlignment.MiddleCenter, DataGridViewContentAlignment.BottomCenter
Return HorizontalAlignment.Center
Case DataGridViewContentAlignment.TopRight, DataGridViewContentAlignment.MiddleRight, DataGridViewContentAlignment.BottomRight
Return HorizontalAlignment.Right
End Select
Throw New ArgumentException("Error: Invalid Content Alignment ")
End Function
End Class
Based on your post, you successfully created a ComboBox Column control in VB. But you want to load list items based on my requirements thro database by passing a query or by list object. I want to know how to initialize ComboxCell list items at run time.
You need to set the data source or populate its items to the corresponding DataGridViewComboBoxColumn object to implement your requirement.
这篇关于请帮助我!!!!!!!!!!!!!!!!!!!!!的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!