radGrid の 2 つのセル値の比較に基づいて CssClass を設定しようとしています。両方のセルが currency 用にフォーマットされて{0:c}
いるため、それらを比較すると、テキスト文字列に $ 記号が含まれています。文字列を解析して $ 記号を削除する方法を知っています。これが私が行っていることです。ただし、このエラーが発生しないように、フォーマットする前にセルの生のテキストを取得する方法はありますか?
これが私のコードです:
ASPX:
<telerik:RadGrid ID="rgCISPartsInfo" DataSourceID="dsCISItem" AutoGenerateColumns="False"
GridLines="None" AllowPaging="False" OnItemDataBound="rgCISPartsInfo_ItemDataBound" runat="server" Width="676px">
<MasterTableView AllowPaging="False" DataKeyNames="SalesOrderItemId">
<Columns>
<telerik:GridBoundColumn HeaderText="COST" DataField="AverageCostPrice" AllowSorting="false"
DataFormatString="{0:c}" HeaderStyle-HorizontalAlign="right" ItemStyle-HorizontalAlign="right"
HeaderStyle-Width="80px">
</telerik:GridBoundColumn>
<telerik:GridBoundColumn DataField="ExtendedCost" HeaderText="X COST" DataFormatString="{0:c}" HeaderStyle-HorizontalAlign="right"
HeaderStyle-Width="80px" ItemStyle-HorizontalAlign="right"></telerik:GridBoundColumn>
<telerik:GridBoundColumn DataField="Weight" HeaderText="WT" HeaderStyle-HorizontalAlign="right" HeaderStyle-Width="80px"
ItemStyle-HorizontalAlign="right"></telerik:GridBoundColumn>
</Columns>
</MasterTableView>
</telerik:RadGrid>
C#:
protected void rgCISPartsInfo_ItemDataBound(object sender, GridItemEventArgs e)
{
try
{
// only access item if not header or footer cell
if ((e.Item.ItemType == GridItemType.Item) || (e.Item.ItemType == GridItemType.AlternatingItem))
{
GridDataItem dataItem = e.Item as GridDataItem;
GridColumn column = rgCISPartsInfo.MasterTableView.GetColumn("AverageCostPrice");
decimal cost = Convert.ToDecimal(dataItem["AverageCostPrice"].Text);
decimal price = Convert.ToDecimal(dataItem["Price"].Text);
if (cost > price)
{
dataItem.CssClass = "Grid_Red_Row";
throw new Exception("Item Cost is greater than price.");
}
}
}
catch (Exception ex)
{
GlobalHelper.ShowErrorMessage(this.Page.Master, ex.Message);
}
}
更新: 選択した解決策は私の質問に対する答えですが、最終的には $ 記号の文字列を単純に解析することにしました。これが最も単純な解決策だったからです。