如何在DataGridViewCell中设置字符串的方向?

时间:2011-02-17 08:02:14

标签: c# .net winforms datagridview datagridviewcolumn

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

5 个答案:

答案 0 :(得分:3)

我知道这是一个老问题,但正如其他人所说,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 question。)

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

答案 1 :(得分:2)

这样的财产不存在。您需要设置整个控件的RightToLeft property

我怀疑你是在试图错误地使用该属性来对你的文本进行右对齐。它旨在支持使用从右到左字体的语言环境,而不是自定义格式。

如果改变格式是您的目标,则每个DataGridViewCell都有一个Style property,可以接受DataGridViewCellStyle class的实例。您可以将其Alignment property设置为“MiddleRight”,以便在中间垂直对齐单元格的内容,在右侧水平对齐。有关详细信息,请参阅:How to: Format Data in the Windows Forms DataGridView Control

答案 2 :(得分:1)

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

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

虽然我相信单个单元格的样式会覆盖它。

答案 3 :(得分:1)

就这么简单:

DataGridView1.Columns["name of column"].DefaultCellStyle.Alignment = DataGridViewContentAlignment.MiddleRight;

答案 4 :(得分: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;
        }
    }