【问题标题】:Format DataTable Column for Percent将 DataTable 列格式化为百分比
【发布时间】:2016-03-13 21:38:37
【问题描述】:

我有一个网格视图

<asp:GridView runat="server" ID="gvTrades" GridLines="None" CellPadding="0" CellSpacing="0" AutoGenerateColumns="true"></asp:GridView>

我正在尝试将第一列格式化为包含“%”的百分比。但是,我无法按名称访问该列。我想从代码隐藏中执行此操作,而不是在 aspx 页面中使用绑定字段。

DataTable dt = SOME METHOD TO FILL UP THE DATATABLE;
gvTrades.DataSource = dt;
gvTrades.DataBind();

这就是我想要做的事情:

gvTrades.Columns["MyColumnName"].Text = {0:P};

【问题讨论】:

  • 你的价值是什么样的?您只需要在末尾附加一个百分号吗?还是像 0.776 这样的东西需要变成 77.6%?
  • 数字是整数“77”或“3”。我需要它是 77% 或 3%

标签: c# asp.net gridview datatable


【解决方案1】:

如果您可以对列索引进行硬编码,您只需在 RowDataBound 事件中执行此操作:

<asp:GridView runat="server" 
    ID="gvTrades" 
    GridLines="None" 
    CellPadding="0" 
    CellSpacing="0" 
    AutoGenerateColumns="true"
    OnRowDataBound="gvTrades_RowDataBound">
</asp:GridView> 
protected void gvTrades_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        e.Row.Cells[0].Text = String.Format("{0}%", e.Row.Cells[0].Text);
    }
}

如果没有,您可以循环 HeaderRow 的每个单元格以查找特定的列名。找到正确的列后,您就拥有了所需的索引。这最好在 GridView DataBound 方法中完成,这样您就不必为每一行循环所有标题单元格。

<asp:GridView runat="server" 
    ID="gvTrades" 
    GridLines="None" 
    CellPadding="0" 
    CellSpacing="0" 
    AutoGenerateColumns="true"
    OnDataBound="gvTrades_DataBound">
</asp:GridView> 
protected void gvTrades_DataBound(object sender, EventArgs e)
{
    int myIndex = 0;
    foreach (DataControlFieldHeaderCell headerCell in gvTrades.HeaderRow.Cells)
    {
        if (headerCell.Text == "MyColumnName")
            break;

        myIndex++;
    }

    if (myIndex <= gvTrades.HeaderRow.Cells.Count - 1)
    {
        foreach (GridViewRow row in gvTrades.Rows)
        {
            row.Cells[myIndex].Text = String.Format("{0}%", row.Cells[myIndex].Text);
        }
    } 
}

【讨论】:

  • 有没有办法专门通过名称而不是索引来引用列?恐怕索引可能会根据填充数据表的存储过程的更改而更改
  • @Firemarble,看我的编辑。这应该可以满足您的需求。
  • 我知道你在做什么,但是当它运行时,它会在 gvTrades.HeaderRow.Cells 上中断,并显示“对象引用未设置为对象的实例。”
  • 那么HeaderRow 是空的吗?如果是这样,您确定GridView中有数据吗?你确定你使用的是GridView的DataBound事件吗?
  • gridview中有数据。那部分工作正常,我什至看到列标题。 OnRowDataBound="gvTrades_DataBound" 在我的 GridView 上。当我在断点检查变量时,它显示 HeaderRow 为 null。
猜你喜欢
  • 2015-09-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多