【问题标题】:Changing DataGridView Header Cells' Text Alignment And The Font Size更改 DataGridView 标题单元格的文本对齐方式和字体大小
【发布时间】:2012-10-09 16:43:09
【问题描述】:

我正在尝试更改 DataGridView 的文本对齐方式和字体大小。所有列都是在运行时以编程方式创建的。这是代码..

private void LoadData()
{
    dgvBreakDowns.ColumnCount = 5;
    dgvBreakDowns.Columns[0].Name = "Breakdown No";
    dgvBreakDowns.Columns[1].Name = "Breakdown Type";
    dgvBreakDowns.Columns[2].Name = "Machine Type";
    dgvBreakDowns.Columns[3].Name = "Date";
    dgvBreakDowns.Columns[4].Name = "Completed";

    dgvBreakDowns.Columns[4].Visible = false;

    foreach (DataGridViewHeaderCell header in dgvBreakDowns.Rows)
    {
        header.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
        header.Style.Font = new Font("Arial", 12F, FontStyle.Bold, GraphicsUnit.Pixel);
    }
}

这个LoadData() 方法在Form 的构造函数中被调用。列已创建,但其标题的更改不适用。 我认为这是因为我的循环中存在缺陷foreach (DataGridViewHeaderCell header in dgvBreakDowns.Rows)? 我不确定。我尝试将其更改为dgvBreakDowns.Columns,但我得到了一个 InvalidCastException。如何选择标题单元格以应用这些更改?

我还有一个小问题。当我运行程序时,它看起来像这样。

请注意,默认情况下选择第一个单元格,因此它显示为蓝色。当然它不会影响任何东西,但它看起来有点丑陋和不整洁。可以阻止它像那样选择单元格吗?

【问题讨论】:

  • 奇怪的是,您可以像这样将DataGridViewRow 拆箱为DataGridViewHeaderCell。我认为您的代码有效的唯一原因是 Rows 集合是空的...

标签: c# datagridview


【解决方案1】:

试试这个(注意我在这里使用的是列而不是行):

foreach(DataGridViewColumn col in dgvBreakDowns.Columns)
{
    col.HeaderCell.Style.Alignment = DataGridViewContentAlignment.MiddleCenter;
    col.HeaderCell.Style.Font = new Font("Arial", 12F, FontStyle.Bold, GraphicsUnit.Pixel);
}

至于取消选中单元格,试试dgvBreakDowns.ClearSelection()

【讨论】:

  • 非常感谢,但我需要 DataGrid,我已将您的代码更改为 This ,此代码用于更改 DataGrid 列标题。我希望对其他人有所帮助...
  • 啊,这帮助我为我的代码找到了这个:C.HeaderCell.Style.Alignment = C.DefaultCellStyle.Alignment;
  • 它对我不起作用。 Align 属性被完全忽略!
【解决方案2】:

或者试试这个:

dgvBreakDowns.Columns[4].HeaderCell.Style.Alignment = DataGridViewContentAlignment.BottomCenter;

【讨论】:

    【解决方案3】:

    您可以使用ColumnHeadersDefaultCellStyle.AlignmentMiddleCenter 作为其值。检查下面的代码:

    dataGridView1.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
    

    【讨论】:

      【解决方案4】:

      仅供参考;为了使控件正确显示自定义样式,需要考虑一些事项。 在这种情况下,关于列标题;但这些确实适用于进一步的定制:

      • 设置:“dataGridView.EnableHeadersVisualStyles”为假。
      • 在 DatagridView 可见后应用样式。
      • 对齐标题列; “AutoSizeColumnMode”必须设置为 Fill。

      确保在控件可见后应用所有自定义样式;您可以使用“DataGridView_VisibleChanged”事件。


      DataGridView 可见更改事件

      /// <summary> Occurrs whenever the Control gets visible. </summary>
      /// <param name="sender"></param>
      /// <param name="e"></param>
      private void DataGridView_VisibleChanged(object sender, EventArgs e)
      {
          if (dataGridView.Visible)
          {
              DataGridView_AutoSizeColumn();
              DataGridView_CentreHeaders();
              // Etc...
          }
      }
      

      标题列 AutoSizeMode

      private void DataGridView_AutoSize()
      {
         var col = dataGridView.Columns;
      
         for (int i = 0; i < col.Count; i++)
         {
            if (i == 0) { col[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; }
            if (i == 1) { col[i].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; }
            // Etc...
          }
      }
      

      中心标题栏文本和设置字体

      /// <summary> Centre Columns Headers. </summary>
      private void DataGridView_CentreHeaders()
      {
          // Centre Column Cells Content
          dataGridView.DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleLeft;
      
          // Centre (Column and Row) Headers    
          dataGridView.ColumnHeadersDefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleCenter;
      
          // Set Font
          dataGridView.ColumnHeadersDefaultCellStyle.Font = new Font("Arial", 11F, FontStyle.Regular, GraphicsUnit.Pixel);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-12-18
        • 2015-01-16
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-07-03
        • 2023-02-25
        相关资源
        最近更新 更多