5

我在需要更改字体大小和样式的 DataGridView(WinForm 应用程序)中有一个列。从这里的文章:http: //msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.font.aspx,我认为下面的代码会得到我想要的结果(我是通过首先更改样式进行测试):

this.dataGridViewMain.Columns[3].DefaultCellStyle.Font = new Font(dataGridViewMain.DefaultCellStyle.Font, FontStyle.Italic);

但是代码并没有改变任何东西。我还尝试在RowPostPaint事件处理程序上添加代码,但仍然无法正常工作。我知道程序使用的字体是在DataGridView.RowsDefaultCellStyle属性上设置的,但我认为在RowPostPaint事件中放置代码会覆盖它。以下是RowPostPaint事件的代码:

void dataGridViewMain_RowPostPaint(object sender, DataGridViewRowPostPaintEventArgs e)
{
    this.dataGridViewMain.Columns[3].DefaultCellStyle.BackColor = Color.Gray;
    foreach (DataGridViewRow row in this.dataGridViewMain.Rows)
    {
        int daysInShop = Convert.ToInt32(row.Cells["Days in the shop"].Value);
        if (daysInShop > 4)
        {
            row.DefaultCellStyle.BackColor = Color.Red;
            row.DefaultCellStyle.ForeColor = Color.White;
        }
        else if (daysInShop > 2)
        {
            row.DefaultCellStyle.BackColor = Color.Yellow;
        }
        else
        {
            row.DefaultCellStyle.BackColor = Color.YellowGreen;
        }
        row.Height = 35;
    }

    this.dataGridViewMain.CurrentCell = null; // no row is selected when DGV is displayed
}

任何帮助表示赞赏。谢谢。

4

4 回答 4

7

好的,这就是我发现的。下面InitializeComponent()有这一行:

dataGridViewCellStyle3.Font = new System.Drawing.Font("Verdana", 14.25F, System.Drawing.FontStyle.Bold, System.Drawing.GraphicsUnit.Point, ((byte)(0)));

当我注释掉该行时,将其中的列斜体化的代码可以RowPostPaint正常工作。然后我在下面添加了代码,RowPostPaint以便其他列字体为粗体且尺寸更小。我仍然不太确定为什么DataGridView.Columns[colNumber].DefaultCellStyle.Font不覆盖dataGridViewCellStyle3

 int colCount = dataGridViewMain.ColumnCount;

 for (int i = 0; i < colCount; i++)
 {
     if(i != 3)
         this.dataGridViewMain.Columns[i].DefaultCellStyle.Font = new System.Drawing.Font("Verdana", 14F, FontStyle.Bold);
     else
         this.dataGridViewMain.Columns[3].DefaultCellStyle.Font = new System.Drawing.Font("Verdana", 25F, FontStyle.Bold);
 }
于 2013-03-15T17:08:06.673 回答
4

字体大小是只读的,因此您需要制作新字体并设置 yourDataGridView.Font = new Font(name,size,style) 更多信息:http: //msdn.microsoft.com/en-us/library/ system.drawing.font.aspx

于 2013-03-15T13:34:04.043 回答
-1

尝试这个:

foreach (DataGridViewRow dr in dataGridView.Rows)
{
     if ( // your condition here )
     {
        dr.Cells[0].Style.Font = new Font( dataGridView.Font, FontStyle.Underline);
        dr.Cells[0].Style.ForeColor = Color.White;      
        dr.Cells[0].Style.BackColor = Color.Red;
     }
     else
     {     
      // It also may be a good idea to restore original settings
      // for the non selected rows just in case you re run this routine               
        dr.Cells[0].Style.BackColor = dataGridView.Columns[0].DefaultCellStyle.BackColor;
        dr.Cells[0].Style.ForeColor = dataGridView.Columns[0].DefaultCellStyle.ForeColor;
        dr.Cells[0].Style.Font = dataGridView.Columns[0].DefaultCellStyle.Font;
    }
}
于 2020-08-21T08:07:34.013 回答
-1

设置RowsDefaultCellStylenull之后InitializeComponent()

我认为DataGridView采用网格/列/行顺序的样式。因此,如果设置了行样式,它总是会覆盖任何列样式。

在我看来,这是一个糟糕的设计——根本不需要默认的行样式!

于 2018-04-15T07:40:01.460 回答