我有一个工作的Windows窗体应用程序,它在事务数据中加载并对其进行分类,添加在该特定类别上花费的欧元金额。
欧元数量显示在dataTable中,如下所示:
但在表示数字时我想要正确对齐。所以这就是我的意思:
现在我知道处理这个问题的一种狡猾的方法(因为:dataTable-object本身应该如何知道如何符合我的意愿?)
但我想知道这种情况是否有更好的方法。
答案 0 :(得分:1)
您可以使用padLeft
:
string euroPart = transactionParts[4].trim('"');
string euroPartFixed;
if(europart.length == 6){
europartFixed = euroPart.PadLeft(7, ' ')
} else if(europart.length == 5){
europartFixed = euroPart.PadLeft(6, ' ')
} else if(europart.length == 4){
europartFixed = euroPart.PadLeft(5, ' ')
}
请注意padleft(X, ' ')
x必须是您要填充的字符串的大小
答案 1 :(得分:1)
我假设它是Windows窗体应用程序。
下面是一个示例应用,其中包含一个包含2列的DataGrid,其中一列的值右对齐。这里必不可少的是
Alignment = HorizontalAlignment.Right
应用程序(复制/粘贴并运行它以查看结果):
using System.Data;
using System.Drawing;
using System.Windows.Forms;
public class Form1 : System.Windows.Forms.Form
{
public static void Main()
{
Application.Run(new Form1());
}
public Form1()
{
var myDataGrid = new DataGrid();
ClientSize = new System.Drawing.Size(450, 330);
myDataGrid.Location = new Point(24, 50);
myDataGrid.Size = new Size(300, 200);
Controls.Add(myDataGrid);
myDataGrid.SetDataBinding(MakeDataSet(), "MyTable");
var tableStyle = new DataGridTableStyle { MappingName = "MyTable" };
var nameColumnStyle = new DataGridTextBoxColumn { MappingName = "Name" };
var sumColumnStyle = new DataGridTextBoxColumn
{
MappingName = "Sum",
Width = 170,
Alignment = HorizontalAlignment.Right
};
tableStyle.GridColumnStyles.Add(nameColumnStyle);
tableStyle.GridColumnStyles.Add(sumColumnStyle);
myDataGrid.TableStyles.Add(tableStyle);
}
private DataSet MakeDataSet()
{
var dataSet = new DataSet("myDataSet");
var table = new DataTable("MyTable");
var nameCol = new DataColumn("Name");
var sumCol = new DataColumn("Sum", typeof(float));
table.Columns.Add(nameCol);
table.Columns.Add(sumCol);
dataSet.Tables.Add(table);
var row1 = table.NewRow();
row1["Name"] = "Bank";
row1["Sum"] = 1.25;
table.Rows.Add(row1);
var row2 = table.NewRow();
row2["Name"] = "Hosting";
row2["Sum"] = 12.5;
table.Rows.Add(row2);
return dataSet;
}
}
<强>更新强>
以下是您需要的自定义对齐示例,它是一个控制台应用,但相同的代码可以在Windows窗体应用中使用:
class Program
{
static void Main(string[] args)
{
var numbers = new[] { 1, 100.12, 50.218, 0.5 };
int length = 10;
var separator = CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator;
foreach (var n in numbers.Select(i => i.ToString()))
{
var offset = n.Contains(separator) ? n.Length - n.IndexOf(separator) : 0;
string format = string.Format("{{0, {0}}}", length + offset);
Console.WriteLine(string.Format(format, n));
}
}
}
根据您的需要调整变量length
。
答案 2 :(得分:1)
我认为它是ASP.NET中的Web应用程序
如果您想正确对齐您的数字,请使用此
<asp:BoundColumn DataField="Value" HeaderText="Value" ItemStyle-HorizontalAlign="Right" DataFormatString="{0:#,##0.00}" ItemStyle-Width="100px"></asp:BoundColumn>
如果您希望数字尽可能接近左边距,则使用此
<asp:BoundColumn DataField="ValueString" HeaderText="ValueString" ItemStyle-Width="300px"></asp:BoundColumn>
要使其正常工作,您必须在数据源中添加一个额外的列,其中包含值的字符串表示形式,您将在数字前插入各种空格字符。
以下是如何操作数据的示例
private void BindData()
{
List<Data> data = new List<Data>();
decimal maxValue = 435;
data.Add(new Data("Familie", 435m));
data.Add(new Data("Bank", 1.25m));
data.Add(new Data("Hosting", 12.1m));
for (int i = 0; i < data.Count; i++)
{
Data item = data[i];
item.ValueString = buildSpaces(100 - (int)((item.Value / maxValue) * 100)) + item.Value.ToString();
}
dg.DataSource = data;
dg.DataBind();
}
private string buildSpaces(int number)
{
System.Text.StringBuilder sb = new System.Text.StringBuilder();
for (int i = 0; i < number; i++)
sb.Append(" ");
return sb.ToString();
}
您的数据类将是这样的
public class Data
{
public string Name { get; set; }
public decimal Value { get; set; }
public string ValueString { get; set; }
public Data()
{
}
public Data(string name, decimal value)
{
Name = name;
Value = value;
}
}