强制AutoGenerateColumns为布尔数据类型创建DataGridViewTextBoxColumn

时间:2012-12-05 14:33:30

标签: .net winforms datagridview autogeneratecolumn

我有很多只读数据,我不喜欢DataGridViewCheckBoxColumn的可点击外观,不幸的是它是呈现布尔数据的默认类型。

有没有办法,在使用AutoGenerateColumns的{​​{1}}之前或之后,我可以强制它生成只会打印DataGridView或{{1}的DataGridViewTextBoxColumns而不是TRUE

Sample of way Data currently is returned

如果在将FALSE设置为DataGridViewCheckBoxColumns之前更容易解决此问题,那也没关系。

2 个答案:

答案 0 :(得分:1)

如果您想继续使用AutoGenerateColumns = TrueDataGridViewCheckBoxColumn,您可以修改外观和行为,使其看起来像一个只读字段。

假设您想要定位所有CheckBoxCell,您可以禁用它们并更改它们的外观,如下所示:

For Each row In DataGridView1.Rows.Cast(Of DataGridViewRow)()
    For Each cell In row.Cells.OfType(Of DataGridViewCheckBoxCell)()
        cell.ReadOnly = True
        cell.FlatStyle = FlatStyle.Flat
        cell.Style.ForeColor = Color.DarkSlateGray
    Next
Next

答案 1 :(得分:0)

我认为如果其他任何人试图完成相同的事情,我会分享上述问题的解决方法。我只需关闭AutoGenerateColumns并通过循环遍历DataTable中的列集来创建自己的列。每次清除数据源和列都很重要,以防它们因呼叫而异。除此之外,我只是从DataTable列设置了col名称,标题和数据属性,我们很高兴。

''' <summary>
''' Generates DataGridViewTextBox Columns for every field of data in the data source
''' </summary>
''' <param name="dgv">The DataGridView having columns and data generated</param>
''' <param name="dt">The source data as a DataTable</param>
''' <remarks></remarks>
Private Sub AutoGenerateTextBoxColumns(ByVal dgv As DataGridView, ByVal dt As DataTable)
    'declare local variables
    Dim column As DataGridViewTextBoxColumn
    'first clear datasource and columns
    If Not IsNothing(dgv.DataSource) Then dgv.DataSource.Clear()
    'clear way for potentially different columns
    If Not IsNothing(dgv.Columns) Then dgv.Columns.Clear()
    'set autogenerate columns to false
    dgv.AutoGenerateColumns = False
    'generate columns for DataGridView
    For Each col As DataColumn In dt.Columns
        column = New DataGridViewTextBoxColumn()
        With column
            .HeaderText = col.ColumnName
            .DataPropertyName = col.ColumnName
            .Name = col.ColumnName
        End With
        dgv.Columns.Add(column)
    Next
    'add datatable as datasource
    dgv.DataSource = dt
End Sub