65.9K
CodeProject 正在变化。 阅读更多。
Home

如何为DataGrid添加选择控件

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.13/5 (28投票s)

2005年2月11日

2分钟阅读

viewsIcon

178777

downloadIcon

2304

本文档描述了如何在 DataGrid 中添加控件。这些控件将在运行时添加。希望这对使用 DataGrid 作为数据录入表单的开发人员有所帮助。

Sample

引言

这将帮助您理解如何将任何类型的控件(例如 ComboBoxDateTimePickerCheckBoxRadioButton 等)添加到您的 DataGrid 控件中。如果需要,您可以从数据库/XML 文件将数据加载到 DataGrid 的某些列中,并将控件添加到单独的一列作为选择。通过这样做,可以减少所需的验证编码,因为您将数据录入限制为选择。

同时,您可以捕获这些添加的控件的事件,并在这些事件触发时执行任何您想要的操作。

背景

当我被要求开发一个应用程序的配置屏幕时,我在搜索“如何在 DataGrid 中添加控件”时遇到了很多困难。我找不到任何关于此主题的完整好文章。经过长时间的研究,我能够制定一种好的方法来做到这一点。我不希望将其作为秘密,我想与大家分享。

使用代码

附带的应用程序包含运行所需的所有代码。由于 DataGrid 的某些列是通过 MS SQL Server ® 数据库加载的,因此您需要相应地更改服务器设置(服务器名称、用户 ID 和密码)。

并在 Query Analyzer 上运行附带的脚本,以在 SQL Server 上创建数据库。

//Capturing clicked cell into a locally defined variable.
Private hitTestGrid As DataGrid.HitTestInfo

您希望在 DataGrid 上拥有的所有控件都应使用 "WithEvents" 关键字声明,只有当您有兴趣捕获它们的事件时才这样做。

Private WithEvents datagridtextBox As DataGridTextBoxColumn
Private WithEvents dataTable As dataTable
Private WithEvents comboControl As System.Windows.Forms.ComboBox
Private WithEvents dtp As New DateTimePicker
Private WithEvents chk As New CheckBox

现在我们将了解如何捕获事件并将值获取到 DataGrid 中。(此代码片段显示了如何从 DateTimePicker 获取值并将其放置在选定的单元格中。)

Private Sub dtp_ValueChanged(ByVal sender As Object, _
        ByVal e As System.EventArgs) Handles dtp.ValueChanged
    dgMember(hitTestGrid.Row, hitTestGrid.Column) = dtp.Value.ToString
End Sub

循环遍历可用列并确定您单击了哪个单元格

For i = 0 To dataTable.Rows.Count - 1
    sType = dgMember(i, 0).ToString()
    If hitTestGrid.Row = i Then
        Select Case hitTestGrid.Row
            Case 1
                datagridtextBox.TextBox.Controls.Add(dtp)
                dtp.BringToFront()
            Case 0
                datagridtextBox.TextBox.Controls.Add(comboControl)
                comboControl.BringToFront()
            Case 2
                datagridtextBox.TextBox.Controls.Add(chk)
                chk.BringToFront()
            Case 3
                datagridtextBox.TextBox.Controls.Add(rb)
                rb.BringToFront()
        End Select
    End If
    datagridtextBox.TextBox.BackColor = Color.White
Next i

请查看代码,您将更好地理解这个概念。

关注点

我在编写这段代码时学到了很多关于 .NET 的新特性。我希望下周能通过我的 VB.NET 认证。

历史

初始版本。

© . All rights reserved.