1

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

有什么办法,在使用之前或之后AutoGenerateColumnsDataGridView我可以强制它生成DataGridViewTextBoxColumns只打印TRUEFALSE代替的DataGridViewCheckBoxColumns

当前返回数据的方式示例

DataTable如果在将其设置为 之前更容易解决此问题DataSource,那也可以。

4

2 回答 2

1

如果您想继续使用AutoGenerateColumns = Trueand DataGridViewCheckBoxColumn,您可以修改外观和行为,使其看起来和行为类似于只读字段。

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

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
于 2014-04-30T15:39:03.163 回答
0

我想我会分享我针对上述问题的解决方法,以防其他人试图完成同样的事情。我只是通过循环遍历 DataTable 中的列集合来关闭AutoGenerateColumns并创建自己的列。每次都清除数据源和列很重要,以防它们因调用而异。除此之外,我只设置了 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
于 2012-12-05T15:15:12.153 回答