2016-06-22 11 views
0

Ich bin mir nicht sicher, was fehlt mir hier? Ich habe gerade meine SQL-Anweisung geändert und jetzt sagt es, dass es nicht die "ID" liest, kann mir bitte jemand helfen?Ein Feld oder eine Eigenschaft mit dem Namen 'Id' wurde nicht in der ausgewählten Datenquelle gefunden.

hier ist mein HTML-Code:

<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> 

und Code hinter:

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

wirklich auf diese verloren, warum seine mir den Fehler

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

Antwort

0

Ihre Anfrage geben:

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 

kehrt nicht eine Spalte 'Id'

genannt, aber Sie verbindlich Id Spalte hier:

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

Ich vermute, Sie nur die ‚Id‘ Spalte aus der Kundentabelle enthalten müssen in Anfrage:

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

sehen Sie eine <asp:BoundField../> mit DataField ="Id" haben und die Abfrage Sie Namen jede Spalte mit nicht holen verwenden wird "Id, Wenn Sie diese Spalte abrufen, bedeutet dies, dass dieser Fehler behoben ist. Oder entfernen Sie das BoundField aus dem Front-End, wenn es in diesem Szenario nicht benötigt wird.

Hinweis: - Sie sollten alle angegebenen DataField s in der Bindungssammlung bereitzustellen, das bedeutet, dass Sie die Spalten durch die Abfrage holen sollte

Verwandte Themen