Question

I am trying to set a CssClass based on a the comparison of two cell values in my radGrid. Both cells are formatted for currency {0:c}, so that when I compare them, I have a $ sign in the text string. I know how to parse a string to remove the $ sign, which is what I am doing. However, is there a way to get the raw text of the cell prior to formatting, so that I will not have this error?

Here is my code:

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);
    }
}

UPDATE: The selected solution is the answer to my question, but I ultimately decided to simply parse the string for the $ sign, as it was the simplest solution.

Was it helpful?

Solution

I would add RadGridDataBound filed with visible="fasle" and different unique name and access it from the code behind.

 <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 HeaderText="COST" DataField="AverageCostPrice" Visiable="false" uniqueName="AverageCostPrice1"  DataField="AverageCostPrice" >
                                </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#

  decimal cost = Convert.ToDecimal(dataItem["AverageCostPrice1"].Text);

PS: Another idea I just had is to assign the DataFormatString durring the ItemDataBound event. this way you'll have the raw string.

OTHER TIPS

One option is to not use format string in the markup and do it in the ItemDataBound event instead.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top