Добавить текст из кода С# в метку gridview

Мне нужно добавить определенный текст в itemtemplate в gridview...

прямо сейчас у меня есть это в моем 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...

Как я могу получить это строковое значение и вставить его на метку внутри поля шаблона/шаблона элемента??


person Victor    schedule 01.12.2012    source источник
comment
Работает ли Text='‹%#GetFormatoMoneda(Eval(Total))%›'?   -  person John    schedule 02.12.2012


Ответы (2)


Вместо ...

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

...использовать

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

Однако это предполагает, что GetFormatoMoneda относится к тому же классу, что и веб-форма. Если нет, то вам нужно указать имя класса, например.

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"))%>'
person Stephen Oberauer    schedule 02.12.2012

Если вы хотите сделать это программно, это сработает:

По умолчанию.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>

Default.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();
  }
}
person SBurris    schedule 03.12.2012