检索ItemDataBound中的RadGrid单元格值-“输入字符串的格式不正确." [英] Retrieve RadGrid cell value in ItemDataBound - "Input string was not in a correct format."
问题描述
我试图基于对radGrid中两个单元格值的比较来设置CssClass.两个单元格的格式都设置为货币{0:c}
,因此当我比较它们时,文本字符串中有一个$符号.我知道如何解析字符串以删除$符号,这就是我在做什么.但是,有没有一种方法可以在格式化之前获取单元格的原始文本,这样我就不会出现此错误?
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?
这是我的代码:
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.
推荐答案
我将添加带有visible="fasle"
和其他唯一名称的RadGridDataBound文件,然后从后面的代码中访问它.
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:
我刚刚想到的另一个想法是在ItemDataBound
事件期间分配DataFormatString
.这样,您将获得原始字符串.
PS:
Another idea I just had is to assign the DataFormatString
durring the ItemDataBound
event. this way you'll have the raw string.
这篇关于检索ItemDataBound中的RadGrid单元格值-“输入字符串的格式不正确."的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!