请帮助我!!!!!!!!!!!!!!!!!!!!! [英] Pls help me!!!!!!!!!!!!!!!!!!!!!

查看:75
本文介绍了请帮助我!!!!!!!!!!!!!!!!!!!!!的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述


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 End Get
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 End Get
设置(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 Horizo​​ntalAlignment
选择大小写align
案例DataGridViewContentAlignment.TopLeft, DataGridViewContentAlignment.MiddleLeft, DataGridViewContentAlignment.BottomLeft
返回Horizo​​ntalAlignment.Left
案例DataGridViewContentAlignment.TopCenter, DataGridViewContentAlignment.MiddleCenter, DataGridViewContentAlignment.BottomCenter
返回ReturnHorizo​​ntalAlignment.Center
案例DataGridViewContentAlignment.TopRight, DataGridViewContentAlignment.MiddleRight, DataGridViewContentAlignment.BottomRight
返回ReturnHorizo​​ntalAlignment.Right
End Select
引发New ArgumentException(错误:无效的内容对齐")
< h2_lin>解决方案

根据您的帖子,您成功在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
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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆