4

如何RightToLeft为 DataGridViewColumn 中的特定 DataGridViewCell 设置属性?

4

5 回答 5

5

我知道这是一个老问题,但正如其他人所说,DataGridViewCellDataGridViewColumn没有RightToLeft财产。但是,有解决此问题的方法:

  1. 处理CellPainting事件并使用TextFormatFlags.RightToLeft标志:

    private void RTLColumnsDGV_CellPainting(object sender, DataGridViewCellPaintingEventArgs e)
       {
          if (e.ColumnIndex == RTLColumnID && e.RowIndex >= 0)
          {
             e.PaintBackground(e.CellBounds, true);
              TextRenderer.DrawText(e.Graphics, e.FormattedValue.ToString(),
              e.CellStyle.Font, e.CellBounds, e.CellStyle.ForeColor,
               TextFormatFlags.RightToLeft | TextFormatFlags.Right);
              e.Handled = true;
           }
       }

    (代码取自CodeProject 问题。)

  2. 如果它只是 DGV 中的一个特定单元格,您可以尝试在单元格内容的开头插入不可见的RTL 字符(U+200F)。

于 2013-01-17T16:26:20.217 回答
2

不存在这样的属性。您需要设置整个控件RightToLeft属性

我怀疑您正试图滥用该属性来正确证明您的文本。它旨在支持使用从右到左字体的语言环境,而不是自定义格式。

如果更改格式是您的目标,则每个DataGridViewCell都有一个接受类实例的Style属性。您可以将其属性设置为“MiddleRight”,以将单元格的内容垂直居中对齐,水平居右对齐。有关详细信息,请参阅:如何:格式化 Windows 窗体 DataGridView 控件中的数据DataGridViewCellStyleAlignment

于 2011-02-17T08:11:03.353 回答
1

要对整个列执行此操作,请使用

dataGridView.Columns["column name"].DefaultCellStyle.Alignment = DataGridViewAlignment.MiddleRight;

尽管我相信单个单元格的样式会覆盖这一点。

于 2011-02-17T08:15:03.053 回答
1

就如此容易:

DataGridView1.Columns["name of column"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;
于 2013-01-17T16:37:05.793 回答
0

我知道这是一篇相当老的帖子,但很多时候我发现旧帖子的答案同样有助于为我指出解决方案,所以无论如何我都会发布我的解决方案。

我通过处理 datagridview 的 EditingControlShowing 事件来做到这一点。解决这个问题时让我失望的一件事是我试图在 datagridviewcell 中查找属性 RightToLeft,但这是 Textbox 的属性。

private void MyDataGridView_EditingControlShowing(object sender, DataGridViewEditingControlShowingEventArgs e)
    {
        TextBox currentCell = e.Control as TextBox;
        if (currentCell != null
            && myDataGridView.CurrentCell.ColumnIndex == NameOfYourColumn.Index) //or compare using column name
        {
            currentCell.RightToLeft = RightToLeft.Yes;
        }
    }
于 2015-05-13T19:29:24.900 回答