2016-06-22 12 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 열 여기 바인딩있어 : 나는 당신을 추측하고있어

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

바로 고객 테이블에서 '아이디'항목에 포함시켜야 조회 :

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

DataField ="Id"<asp:BoundField../>하고 이름어떤 열을 가져올 수 없습니다 사용하는 쿼리를 참조하십시오, 해당 열을 가져 오면이 오류가 해결된다는 의미입니다. 또는이 시나리오에서 필요하지 않은 경우 프런트 엔드에서 BoundField을 제거하십시오.

참고 : - 당신은 쿼리를 통해 그 열을 가져해야 의미하는 바인딩 컬렉션의 지정된 모든 DataField의를 제공한다