Получить значение ячейки RadGrid в ItemDataBound - «Входная строка была в неправильном формате.» - PullRequest
0 голосов
/ 30 января 2012

Я пытаюсь установить CssClass на основе сравнения двух значений ячеек в моей radGrid.Обе ячейки отформатированы для валюты {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);
    }
}

ОБНОВЛЕНИЕ: выбранное решение является ответом на мой вопрос, но в итоге я решил просто разобрать строку для знака $, так как это было самое простое решение.

Ответы [ 2 ]

0 голосов
/ 30 января 2012

Я бы добавил RadGridDataBound с visible="fasle" и другим уникальным именем и получил бы доступ к нему из кода.

 <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: Еще одна идея, которую я только что предложил, - назначить DataFormatString во время события ItemDataBound. таким образом у вас будет необработанная строка.

0 голосов
/ 30 января 2012

Один из вариантов - не использовать форматную строку в разметке и вместо этого делать это в событии ItemDataBound.

...