2013-05-06 37 views
0

我遇到了一個小問題,我找不到解決方案。asp.Net Gridview顯示數據類型而不是值

當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

I'didnt找到了一個工作解決方案。

我已經這樣做了它的工作原理:

我創建了一個新的類,在這一點上,我用它。現在它的工作原理:

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(); 
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> 
+0

noew即時得到'數據綁定:「System.String」不包含名爲「Value'.'貌似在assining屬性 – domiSchenk 2013-05-06 14:14:46

+0

如果'Price'是問題的性質「Microsoft.Xrm.Sdk.Money」對象的「Value」屬性將正確綁定。嘗試以這種方式綁定價格'綁定(「價格」)'並檢查輸出 – 2013-05-06 14:26:05

+0

這是一個貨幣類型,請參閱我的編輯。我會得到Type而不是它的值:-( – domiSchenk 2013-05-06 14:31:47