0

我的网格视图中有一个列,它显示从我的数据库表中提取的某些项目的总成本。但是,我的用户也有一个附加到他们的帐户的货币信息。我想做的是根据个人用户的货币信息转换此列。我尝试了以下方法:

<asp:HiddenField id="currencyconvfactor" runat="server" />

<asp:TemplateField HeaderText="Total" SortExpression="Total">
    <ItemTemplate>
        <%# currencyconvfactor.Value %> //this is just a test. see below for the issue.
    </ItemTemplate>
</asp:TemplateField>

代码背后

protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
            currencyconvfactor.Value = 12345 
            //i simplified retrieving the specific factor value here as I do some database commands to pull the specific value
    }

但是,我注意到模板字段列始终为空。这是否意味着在页面加载事件之前生成了网格视图?如果是这样,我如何在第一页加载时执行列转换?更具体地说,如何访问转换因子以及时执行转换?

4

3 回答 3

1

您可能希望查看使用RowDataBound事件来访问列并执行您需要的任何计算:

.aspx:

<Columns>
    <asp:TemplateField HeaderText="Template Field">
        <ItemTemplate>
            <asp:Label ID="lblConvValue" Runat="server" /> 
        </ItemTemplate>
    </asp:TemplateField>
</Columns>

代码隐藏:

void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    if (e.Row.RowType == DataControlRowType.DataRow)
    {
        // Get the current row's data
        DataRowView rowView = (DataRowView)e.Row.DataItem;

        // Do your conversion
        var conv = int.Parse(rowView["valueToConvert"].ToString()); 
        var converted = conv * 12345; // Whatever conversion you want.

        // Set the value of the control in the ItemTemplate
        Label lblConvValue= (Label)e.Row.FindControl("lblConvValue");
        lblConvValue.Text = converted.ToString(); 
    }
}
于 2012-11-20T21:51:15.517 回答
1

如果所有行都使用相同的货币转换因子,您可以执行以下操作。...

 <ItemTemplate>
    <%#GetCurrencyconvfactor()%>
 </ItemTemplate>

...

在后面的代码中定义一个返回值的方法

    public string GetCurrencyconvfactor()
    {
        //you can also pass in custID as an argument if each row uses different factor
        return "123"; // or get this from the user profile/settings 
    }
于 2012-11-20T22:02:19.563 回答
0

定义好值后,调用GridView.DataBind()

于 2012-11-20T21:44:01.787 回答