我有很多只读数据,我不喜欢DataGridViewCheckBoxColumn
的可点击外观,不幸的是它是呈现布尔数据的默认类型。
有没有办法,在使用AutoGenerateColumns
的{{1}}之前或之后,我可以强制它生成只会打印DataGridView
或{{1}的DataGridViewTextBoxColumns
而不是TRUE
?
如果在将FALSE
设置为DataGridViewCheckBoxColumns
之前更容易解决此问题,那也没关系。
答案 0 :(得分:1)
如果您想继续使用AutoGenerateColumns = True
和DataGridViewCheckBoxColumn
,您可以修改外观和行为,使其看起来像一个只读字段。
假设您想要定位所有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