1

我需要在 gridview 上的 itemtemplate 中添加特定文本...

现在我在我的gridview中有这个

<asp:TemplateField HeaderText="Total" SortExpression="Total" ItemStyle-Width="100px">
    <ItemTemplate>
        <asp:Label ID="lblTotal" runat="server" Text='<%#Math.Round(Convert.ToDouble(Eval("Total")), 2).ToString("C") + " M.N."%>'>
        </asp:Label>
    </ItemTemplate>
</asp:TemplateField>

在它说的部分

<asp:Label ID="lblTotal" runat="server" Text='<%#Math.Round(Convert.ToDouble(Eval("Total")), 2).ToString("C") + " M.N."%>'>

我做了一个特定的文本,但它总是相同的文本(当然除了在 Eval 中)......但我需要从这个方法中获取我需要的格式。

public static string GetFormatoMoneda(decimal decCantidad)
{
    //Get data from currency (Dollars, Pesos, Euros, etc.)
    DataRow dr = ConexionBD.GetInstanciaConexionBD().GetTipoDeMonedaPrincipal((int)HttpContext.Current.Session["Grupo"]);

    return dr["Signo"] + Math.Round(decCantidad, 2).ToString("C").Substring(1) + " " + dr["Abreviatura"];
}

我使用这种方法来获取特定的字符串并在标签上使用它(我在cs文件上的代码上分配它)..但在这种情况下......我必须将该文本插入到gridview的列上......

如何获取该字符串值并将其插入到模板字段/项目模板内的标签上?

4

2 回答 2

2

代替 ...

Text='<%#Math.Round(Convert.ToDouble(Eval("Total")), 2).ToString("C") + " M.N."%>'

...采用

Text='<%#GetFormatoMoneda(Eval("Total"))%>'

但是,这假定 GetFormatoMoneda 与 Web 表单属于同一类。如果没有,那么您需要包含类名,例如

Text='<%#MyClass.GetFormatoMoneda(Eval("Total"))%>'

然后您需要更改 GetFormatoMoneda 以使用对象类型参数,例如

public static string GetFormatoMoneda(object objCantidad)
{
    var decCantidad = Convert.ToDecimal(decCantidad);

    //Get data from currency (Dollars, Pesos, Euros, etc.)
    DataRow dr = ConexionBD.GetInstanciaConexionBD().GetTipoDeMonedaPrincipal((int)HttpContext.Current.Session["Grupo"]);

    return dr["Signo"] + Math.Round(decCantidad, 2).ToString("C").Substring(1) + " " + dr["Abreviatura"];
}

或者使用带有对象参数的其他方法并调用 GetFormatoMoneda(decimal),传入正确的值,例如

protected string CorrectFormat(object obj)
{
    return GetFormatoMoneda(Convert.ToDecimal(obj));
}

在这种情况下你会使用

Text='<%#CorrectFormat(Eval("Total"))%>'
于 2012-12-02T00:21:22.393 回答
1

如果您想以编程方式执行此操作,则可以这样做:

默认.aspx:

<asp:GridView ID="gvGrid" runat="server" AutoGenerateColumns="false" OnRowDataBound="gvGrid_RowDataBound">
  <Columns>
    <asp:TemplateField>
      <ItemTemplate>
        <asp:Label ID="lblTotal" runat="server" />
      </ItemTemplate>
    </asp:TemplateField>
  </Columns>
</asp:GridView>

默认.aspx.cs:

protected void Page_Load(object sender, EventArgs e)
{
  if (!IsPostBack)
  {
    //Generate fake data
    var data = Enumerable.Range(1, 20);

    //Give the data to the grid
    gvGrid.DataSource = data;
    gvGrid.DataBind();
  }
}

protected void gvGrid_RowDataBound(object sender, GridViewRowEventArgs e)
{
  if (e.Row.RowType == DataControlRowType.DataRow)
  {
    //Find the control
    var lblTotal = (Label)e.Row.FindControl("lblTotal");

    //Get the data for this row
    var data = (int)e.Row.DataItem;

    //Display the data
    lblTotal.Text = data.ToString();
  }
}
于 2012-12-03T17:51:49.677 回答