代码之家  ›  专栏  ›  技术社区  ›  John

如何在DataGridViewTextBoxCell和DataGridViewComboxCell之间切换?

  •  5
  • John  · 技术社区  · 16 年前

    我想我只需要创建DataGridViewColumn类型的第二列,但不了解如何动态更改单元格类型的机制。

    我正在Visual Studio 2005中使用VB.NET。

    提前谢谢!

    更新: 我认为,解决这个问题的一种方法是将第二列设置为DataGridViewComboBoxColumn,并更改单元格的属性,使其行为类似于下拉列表,或者是不包含任何元素的(可编辑的)下拉列表。后者看起来很像一个文本框,我可以接受它,而且不需要改变单元格的类型。

    3 回复  |  直到 16 年前
        1
  •  3
  •   Jon Comtois    16 年前

    在本例中,我设置了一个包含2列的简单DataGridView。第一个是DataGridViewComboBox,其中填充了两个选项:“文本”或“组合”。

    第二列最初从设计器设置为DataGridViewTextBoxColumn。

    以下是我使用的代码,并对其进行了快速而肮脏的测试:

    private void dataGridView1_CurrentCellDirtyStateChanged(object sender, EventArgs e)
        {
            if (dataGridView1.IsCurrentCellDirty == false)
            {
                return;
            }
    
            dataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit);
    
            if (dataGridView1.CurrentCell.ColumnIndex == 0)
            {               
                if (((string)dataGridView1.CurrentCell.Value) == "Text")
                {
                    dataGridView1.Rows[dataGridView1.CurrentCell.RowIndex].Cells[1] = new DataGridViewTextBoxCell();
                }
                else if (((string)dataGridView1.CurrentCell.Value) == "Combo")
                {
                    dataGridView1.Rows[dataGridView1.CurrentCell.RowIndex].Cells[1] = new DataGridViewComboBoxCell();
                }
            }
        }
    

    Public Class Form1
    
    Private Sub DataGridView1_CurrentCellDirtyStateChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles DataGridView1.CurrentCellDirtyStateChanged
    
        If DataGridView1.IsCurrentCellDirty = False Then
            Return
        End If
    
        DataGridView1.CommitEdit(DataGridViewDataErrorContexts.Commit)
    
        If DataGridView1.CurrentCell.ColumnIndex = 0 Then
    
            If CStr(DataGridView1.CurrentCell.Value) = "Text" Then
                DataGridView1.Rows(DataGridView1.CurrentCell.RowIndex).Cells(1) = New DataGridViewTextBoxCell
    
            ElseIf CStr(DataGridView1.CurrentCell.Value) = "Combo" Then
                DataGridView1.Rows(DataGridView1.CurrentCell.RowIndex).Cells(1) = New DataGridViewComboBoxCell
            End If
    
        End If
    
    
    End Sub
    

    末级

    乔恩

        2
  •  2
  •   Sheng Jiang 蒋晟    16 年前

    您可以创建自己的承载用户控件的单元格模板。在用户控件中添加一个文本框和一个组合框,并添加一个方法/属性来显示一个和隐藏另一个。

    This sample 创建单选按钮单元格时,不难将代码更改为宿主用户控件。

        3
  •  0
  •   Abhijeet    11 年前
    dgvCell = new DataGridViewTextBoxCell();         // code to remove checkbox
            dgvCell.Value = string.Empty;
            dgv_modi_del_trans.Rows[1].Cells[0] = dgvCell;