2016-06-22 258 views
0

ここには何が欠けているのですか?私はSQL文を変更しましたが、今は "ID"を読んでいないと誰かが私を助けてくれますか?背後「Id」という名前のフィールドまたはプロパティが選択されたデータソースで見つかりませんでした

<asp:GridView ID="gvCustomerOrders" runat="server" Width="940px" HorizontalAlign="Center" 
    AutoGenerateColumns="false" AllowPaging="True" CssClass="table table-hover table-striped" OnPageIndexChanging="gvCustomerOrders_PageIndexChanging"> 

<Columns> 
        <asp:BoundField DataField ="Id" HeaderText ="Id" ItemStyle-Width="100" > 
        <ItemStyle Width="100px"></ItemStyle> 
        </asp:BoundField> 
        <asp:BoundField DataField ="CustomerName" HeaderText ="Name" />  
        <asp:BoundField DataField ="CustomerPhoneNo" DataFormatString= "{0:(###) ###-####}" HeaderText ="PhoneNo" /> 
        <asp:BoundField DataField ="CustomerEmailID" HeaderText ="Email" /> 
        <asp:BoundField DataField ="Name" HeaderText ="Product" /> 
        <asp:BoundField DataField ="TotalPrice" DataFormatString="{0:C2}" HeaderText ="Price" /> 


        <asp:TemplateField> 
         <ItemTemplate> 
          <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl ='<%# Eval("Id", "~/Admin/OrderDetails.aspx?Id={0}") %>' 
           Text="View Details" Target="_blank" /> 
         </ItemTemplate> 
         </asp:TemplateField> 
</Columns> 

やコード:

public void bindgrid() 
    { 
     SqlConnection conn = new SqlConnection("Data Source = 'PAULO'; Initial Catalog=ShoppingCartDB;Integrated Security =True"); 
     SqlCommand cmd = new SqlCommand("select DISTINCT STUFF((SELECT ',' + p.[name] FROM Products p INNER JOIN CustomerProducts cp ON cp.ProductID = p.ProductID WHERE cp.CustomerID = cd.Id FOR XML PATH(''),TYPE).value('.','nvarchar(max)'),1,1,'') AS Name, cd.CustomerName, cd.CustomerEmailID ,cd.CustomerPhoneNo,cd.CustomerAddress ,cd.TotalPrice,cd.OrderDateTime, cd.PaymentMethod FROM CustomerDetails cd Inner Join CustomerProducts cp ON cp.CustomerID = cd.Id", conn); 

     SqlDataAdapter da = new SqlDataAdapter("", conn); 
     da.SelectCommand = new SqlCommand("select DISTINCT STUFF((SELECT ',' + p.[name] FROM Products p INNER JOIN CustomerProducts cp ON cp.ProductID = p.ProductID WHERE cp.CustomerID = cd.Id FOR XML PATH(''),TYPE).value('.','nvarchar(max)'),1,1,'') AS Name, cd.CustomerName, cd.CustomerEmailID ,cd.CustomerPhoneNo,cd.CustomerAddress ,cd.TotalPrice,cd.OrderDateTime, cd.PaymentMethod FROM CustomerDetails cd Inner Join CustomerProducts cp ON cp.CustomerID = cd.Id", conn); 
     DataSet ds = new DataSet(); 
     da.Fill(ds, "data"); 
     gvCustomerOrders.DataSource = ds.Tables[0].DefaultView; 
     gvCustomerOrders.DataBind(); 
    } 

本当にそのは私にエラー

A field or property with the name 'Id' was not found on the selected data source. 

答えて

0

あなたのクエリを与える理由でこれに失われた:

をここ

は私のhtmlコードであります
select DISTINCT STUFF((SELECT ',' + p.[name] FROM Products p INNER JOIN CustomerProducts cp ON cp.ProductID = p.ProductID WHERE cp.CustomerID = cd.Id FOR XML PATH(''),TYPE).value('.','nvarchar(max)'),1,1,'') AS Name, cd.CustomerName, cd.CustomerEmailID ,cd.CustomerPhoneNo,cd.CustomerAddress ,cd.TotalPrice,cd.OrderDateTime, cd.PaymentMethod FROM CustomerDetails cd Inner Join CustomerProducts cp ON cp.CustomerID = cd.Id 

'Id'

という名前の列を返しませんが、あなたはここでId列結合している:私はあなただけでは、顧客テーブルから「ID」列を含める必要が推測している

<asp:BoundField DataField ="Id" HeaderText ="Id" ItemStyle-Width="100" > 

を問合せ:

select DISTINCT Id, STUFF((...... 
0

あなたはDataField ="Id"<asp:BoundField../>を持っているし、使用しているクエリは名前を持つ任意の列を取得しませんを参照してください"Id、その列をフェッチすると、このエラーは解決されます。このシナリオでは不要な場合は、フロントエンドからそのBoundFieldを削除してください。

注: - あなたは、クエリによってそれらの列をフェッチしなければならないことを意味する、バインディングコレクションに指定されたすべてのDataField Sを提供する必要があります

関連する問題