asp.Net Gridview显示数据类型而不是值

时间:2013-05-06 13:46:56

标签: asp.net gridview dynamics-crm-2011

我遇到了一些问题,我找不到解决方案。

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

2 个答案:

答案 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();