现在的位置: 首页 > 综合 > 正文

将 ComboBox 控件添加到 Windows 窗体 DataGrid 控件

2013年08月23日 ⁄ 综合 ⁄ 共 2746字 ⁄ 字号 评论关闭
文章目录

HOW TO:将 ComboBox 控件添加到 Windows 窗体 DataGrid 控件

适用于

本文引用下面的 Microsoft .NET 框架类库名称空间:

  • System.Data.SqlClient
  • System.Windows.Forms

本任务的内容

概要

本分步指南介绍一种您可以用来将 ComboBox 控件添加到 DataGrid 控件的方法。

有很多方法可以将 ComboBox 控件添加到 DataGrid 控件。其中多数方法涉及到使用 DataGridColumnStyles 集合。不过,本文将使用一种较为简单的方法,将下拉 ComboBox 控件添加到 DataGrid控件集合。

back to the top

创建示例

  1. 按照如下步骤创建一个新的 Visual Basic Windows 应用程序项目:

    1. 启动 Microsoft Visual Studio .NET。
    2. 文件菜单上,指向新建,然后单击项目
    3. 新建项目对话框中,单击对象类型下的 Visual Basic 项目,然后单击模板下的 Windows 应用程序。默认情况下将添加 Form1。
  2. 将一个 DataGrid 控件从工具箱到拖到 Form1。
  3. 将下面的代码添加到代码窗口顶部的 Form1.vb 的“声明”部分中:
    Imports System.Data.SqlClient
    Imports System.Windows.Forms
    					
  4. 将下面的代码添加到代码窗口的“Windows 窗体设计器生成代码”部分之后:
    Public MyCombo As New ComboBox()
        Dim con As New SqlConnection("server=myservername;uid=myid;
  5. pwd=mypassword;database=northwind")
        Dim daEmp As New SqlDataAdapter("Select * From Employees", con)
    
        Public ds As New DataSet()
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As _
  6. System.EventArgs) Handles MyBase.Load
            AddHandler MyCombo.TextChanged, AddressOf Ctrls_TextChanged
            'Fill ComboBox list.
            MyCombo.Name = "MyCombo"
            MyCombo.Visible = False
            MyCombo.Items.Clear()
            MyCombo.Items.Add("Sales Representative")
            MyCombo.Items.Add("Inside Sales Coordinator")
            MyCombo.Items.Add("Vice President, Sales")
            MyCombo.Items.Add("Sales Manager")
            MyCombo.Items.Add("Flunky")
    
           
            daEmp.Fill(ds, "Employees")
    
            'Set the RowHeight of the DataGrid to the height of the ComboBox.
            DataGrid1.PreferredRowHeight = MyCombo.Height
            
            DataGrid1.DataSource = ds
    
            DataGrid1.DataMember = "Employees"
            'Add ComboBox to the Control collection of the DataGrid.
            DataGrid1.Controls.Add(MyCombo)
        End Sub
    
        Private Sub DataGrid1_Paint(ByVal sender As Object, ByVal e As_
  7.  System.Windows.Forms.PaintEventArgs) Handles DataGrid1.Paint
            If DataGrid1.CurrentCell.ColumnNumber = 3 Then
                MyCombo.Width = DataGrid1.GetCurrentCellBounds.Width
            End If
        End Sub
    
        Private Sub Ctrls_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs)
            If DataGrid1.CurrentCell.ColumnNumber = 3 Then
                MyCombo.Visible = False
                If DataGrid1.Item(DataGrid1.CurrentCell) & "" = "" Then
                    SendKeys.Send("*")
                End If
                DataGrid1.Item(DataGrid1.CurrentCell) = MyCombo.Text
            End If
        End Sub
    
        Private Sub DataGrid1_CurrentCellChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataGrid1.CurrentCellChanged
            If DataGrid1.CurrentCell.ColumnNumber = 3 Then
                MyCombo.Visible = False
                MyCombo.Width = 0
                MyCombo.Left = DataGrid1.GetCurrentCellBounds.Left
                MyCombo.Top = DataGrid1.GetCurrentCellBounds.Top
                MyCombo.Text = DataGrid1.Item(DataGrid1.CurrentCell) & ""
                MyCombo.Visible = True
            Else
                MyCombo.Visible = False
                MyCombo.Width = 0
            End If
        End Sub
    
        Private Sub DataGrid1_Scroll(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataGrid1.Scroll
            MyCombo.Visible = False
            MyCombo.Width = 0
        End Sub
    
        Private Sub DataGrid1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles DataGrid1.Click
            MyCombo.Visible = False
            MyCombo.Width = 0
        End Sub
    					
  8. 根据您的环境需要修改连接字符串。
  9. 按 F5 键运行该项目。单击 DataGrid 中“标题”列中的一个字段。您会注意到 ComboBox 控件位于 DataGrid 中。
  10. 展开 ComboBox。您会注意到显示出了一个标题列表。

抱歉!评论已关闭.