2012-12-01 2 views
1

Je dois ajouter un texte spécifique dans une itemtemplate sur un gridview ...Ajouter du texte à partir du code C# à une étiquette gridview

en ce moment j'ai dans mon 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> 

dans la partie où il est dit

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

J'ai fait un texte spécifique, mais ce sera toujours le même texte (bien que dans le Eval bien sûr) ... mais je dois obtenir le format que j'ai besoin de cette méthode.

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"]; 
} 

-je utiliser cette méthode pour obtenir une chaîne spécifique et de l'utiliser sur les étiquettes (je de lui attribuer le code sur le fichier cs) .. Mais dans ce cas ... je dois ajouter que le texte sur la colonne d'un gridview ...

Comment puis-je obtenir cette valeur de chaîne et l'insérer sur une étiquette à l'intérieur d'un templatefield/itemtemplate ??

+0

Est-ce que Text = '<% # GetFormatoMoneda (Eval ("Total"))%>' travail? – John

Répondre

2

Au lieu de ...

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

... utiliser

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

Cependant, cela suppose que GetFormatoMoneda est dans la même classe que le formulaire Web. Si ce n'est pas le cas, vous devez inclure le nom de la classe, par ex.

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

Ensuite, vous devez soit faire un changement à GetFormatoMoneda d'utiliser un paramètre de type d'objet, par exemple

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"]; 
} 

ou utiliser une autre méthode avec un paramètre d'objet et d'appeler GetFormatoMoneda (décimal), en passant à la valeur correcte, par exemple

dans ce cas, vous pouvez utiliser

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

Si vous vouliez le faire par programmation, cela fonctionnerait:

Default.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(); 
    } 
} 
Questions connexes