货币符号左对齐,值在GridView中右对齐

时间:2016-11-06 12:56:23

标签: c# winforms devexpress

是否可以在DevExpress GridView中将货币符号与左侧对齐以及右侧的值对齐? Here's an image details link

1 个答案:

答案 0 :(得分:1)

此任务超出了常规文本格式。要完成它,您需要手动绘制单元格内容。

XtraGrid为此目的提供了事件:CustomDrawCellevent argument object提供了对图形对象,单元格边界以及手动绘制单元格文本所需的其他信息的引用。

private void OnGridViewCustomDrawCell(object sender, RowCellCustomDrawEventArgs e) {
    switch (e.Column.FieldName) {
        case "Debit":
            DrawDebitCell(e);
            break;  
    }       
}

private void DrawDebitCell(RowCellCustomDrawEventArgs e) {
    e.Handled = true;
    string text = string.Format(CultureInfo.CurrentCulture, "{0} {1:n2}", CultureInfo.CurrentCulture.NumberFormat.CurrencySymbol, e.CellValue);
    Size textSize = e.Appearance.CalcTextSizeInt(e.Cache, text, int.MaxValue);
    e.Appearance.DrawBackground(e.Cache, e.Bounds);
    if (Convert.ToInt32(textSize.Width) > e.Bounds.Width)
        e.Appearance.DrawString(e.Cache, text, e.Bounds);
    else {
        StringFormat stringFormat = e.Appearance.GetStringFormat();
        string valueText = string.Format(CultureInfo.CurrentCulture, "{0:n2}", e.CellValue);
        stringFormat.Alignment = StringAlignment.Near;
        e.Appearance.DrawString(e.Cache, CultureInfo.CurrentCulture.NumberFormat.CurrencySymbol, e.Bounds, e.Appearance.Font, stringFormat);
        stringFormat.Alignment = StringAlignment.Far;
        e.Appearance.DrawString(e.Cache, valueText, e.Bounds, e.Appearance.Font, stringFormat);
    }
}

这种方法有一些缺点:

  • 内置Export and Printing系统

  • 未使用手动绘制的单元格内容
  • 有必要计算文本宽度以确保值和货币符号不会相互重叠。为此,您可以使用通过事件参数提供的 AppearanceObject 对象的CalcTextSizeInt方法。 DevExpress使用自己的文本呈现引擎,因此标准Graphics.MeasureString方法在这种情况下无用