我遇到了一些问题,我找不到解决方案。
当gridview绑定时,所有价格将显示为Microsoft.Xrm.Sdk.Money
而不是其值。
有谁知道为什么会发生这种情况以及如何改变它?
这是我的Gridview:
<asp:GridView ID="ProductList"
runat="server"
AutoGenerateColumns="false"
OnRowDataBound="ProductList_OnRowDataBound">
<Columns>
<asp:BoundField
HeaderText="Productno."
DataField="ProductNumber"/>
<asp:BoundField
HeaderText="Product"
DataField="Name" />
<asp:BoundField
HeaderText="Price/Unit"
DataField="Price" />
</Columns>
</asp:GridView>
我填写了以下代码
Products = (from ppl in priceCatalog.price_level_product_price_levels
join prod in ServiceContext.ProductSet.ToList()
on ppl.ProductId.Id equals prod.ProductId
select new Product()
{
ProductId = prod.ProductId,
ProductNumber = prod.ProductNumber,
Name = prod.Name,
Price = prod.Price,
//Price = ppl.Amount.Value,
PriceLevelId = ppl.PriceLevelId,
SubjectId = prod.SubjectId,
DefaultUoMId = ppl.UoMId
}).ToList();
var product = Products.Where(p => p.SubjectId.Id == filterTo).ToList();
ProductList.DataKeyNames = new[] { "ProductId" };
ProductList.DataSource = product.ToDataTable(XrmContext);
ProductList.DataBind();
目前它看起来像这样:
PNo. Name Price
1 Prod 1 Microsoft.Xrm.Sdk.Money
2 Prod 2 Microsoft.Xrm.Sdk.Money
3 Prod 3 Microsoft.Xrm.Sdk.Money
....
在xrm.cs上(生成的与CRM早期绑定的文件)
以下内容:
[Microsoft.Xrm.Sdk.AttributeLogicalNameAttribute("price")]
public System.Nullable<decimal> Price
{
get
{
return this.GetAttributeValue<System.Nullable<decimal>>("price");
}
set
{
this.SetAttributeValue<Microsoft.Xrm.Sdk.Money>("Price", "price", value);
}
}
答案 0 :(得分:1)
您可以使用TemplateField
显示Value
字段的Price
属性(包含小数值)。我在你的例子中添加了另一列
<asp:GridView ID="ProductList"
runat="server"
AutoGenerateColumns="false"
OnRowDataBound="ProductList_OnRowDataBound">
<Columns>
<asp:BoundField
HeaderText="Productno."
DataField="ProductNumber"/>
<asp:BoundField
HeaderText="Product"
DataField="Name" />
<asp:BoundField
HeaderText="Price/Unit"
DataField="Price" />
<asp:TemplateField HeaderText="Price/Unit Decimal">
<ItemTemplate>
<asp:Label ID="Label1" runat="server" Text='<%# Bind("Price.Value") %>'></asp:Label>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>
答案 1 :(得分:0)
我找到了一个有效的解决方案。
我做了什么,所以它有效:
我创建了一个新类,此时我使用了它。现在它起作用了:
Products = (from ppl in priceCatalog.price_level_product_price_levels
join prod in ServiceContext.ProductSet.ToList()
on ppl.ProductId.Id equals prod.ProductId
select new ProductClass()
{
ProductId = prod.ProductId,
ProductNumber = prod.ProductNumber,
Name = prod.Name,
Price = prod.Price,
//Price = ppl.Amount.Value,
PriceLevelId = ppl.PriceLevelId,
SubjectId = prod.SubjectId,
DefaultUoMId = ppl.UoMId
}).ToList();