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

すべての行が同じ通貨換算係数を使用している場合は、次のように実行できます。..。

 <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 に答える
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 に答える
0

値を定義したら、GridView.DataBind() を呼び出します。

于 2012-11-20T21:44:01.787 に答える