2013-08-21 18 views
0

發現我有下面的代碼嵌套數據網格:ASP .NET嵌套的Datagrid - 字段或屬性是不是在選擇數據源錯誤

<asp:DataGrid ID="QuotesGrid" Runat="server" AutoGenerateColumns="False" PageSize="1"  AllowPaging="True"> 
<Columns> 
    <asp:BoundColumn DataField="QuoteNum" SortExpression="QuoteNum" HeaderText="Quote Number"> 
    </asp:BoundColumn> 
    <asp:BoundColumn DataField="TerritoryTerritoryDesc" SortExpression="Territory" HeaderText="Sales Territory"> 
    </asp:BoundColumn> 
    <asp:BoundColumn DataField="DueDate" SortExpression="DueDate" HeaderText="Due Date"> 
    </asp:BoundColumn> 
    <asp:BoundColumn DataField="BTCustID" SortExpression="BTCustID" HeaderText="Customer ID"> 
    </asp:BoundColumn> 
    <asp:BoundColumn DataField="CustomerName" SortExpression="CustomerName" HeaderText="Customer Name"> 
    </asp:BoundColumn> 
    <asp:BoundColumn DataField="QuoteAmt" SortExpression="QuoteAmt" HeaderText="Total Quote Value"> 
    </asp:BoundColumn> 
    <asp:TemplateColumn HeaderText="Quote Lines"> 
    <ItemTemplate> 
    <asp:DataGrid ID="QuoteLines_Grid" Runat="server" AllowPaging="False" AllowSorting="False" AutoGenerateColumns="False" 
      ShowHeader="False">   
     <Columns>     
       <asp:BoundColumn DataField="QuoteLine" HeaderText="Line Number"></asp:BoundColumn> 
     <asp:BoundColumn DataField="PartNum" HeaderText="Part Number"></asp:BoundColumn> 
       <asp:BoundColumn DataField="LineDesc" HeaderText="Line Description"></asp:BoundColumn> 
    </Columns> 
    </asp:DataGrid> 
    </ItemTemplate> 
</asp:TemplateColumn> 
</Columns> 
<PagerStyle HorizontalAlign="Center" ForeColor="#330099" BackColor="#FFFFCC" Mode="NumericPages"> 
</PagerStyle> 
</asp:DataGrid>  

我後面的代碼看起來像下面:

DataSet dsQuote = new DataSet("dsQuote"); 
DataTable dtQuoteHed = new DataTable("dtQuoteHed"); 
dtQuoteHed.Columns.Add("QuoteNum", typeof(int)); 
dtQuoteHed.Columns.Add("QuoteLine", typeof(int)); 
dtQuoteHed.Columns.Add("TerritoryTerritoryDesc", typeof(string)); 
dtQuoteHed.Columns.Add("DueDate", typeof(DateTime)); 
dtQuoteHed.Columns.Add("BTCustID", typeof(string)); 
dtQuoteHed.Columns.Add("CustomerName", typeof(string));   dtQuoteHed.Columns.Add("QuoteAmt", typeof(decimal)); 
dtQuoteHed.PrimaryKey = new DataColumn[] { dtQuoteHed.Columns["QuoteNum"] }; 

DataTable dtQuoteDtl = new DataTable("dtQuoteDtl");    
dtQuoteDtl.Columns.Add("QuoteNum", typeof(int)); 
dtQuoteDtl.Columns.Add("QuoteLine", typeof(int)); 
dtQuoteDtl.Columns.Add("PartNum", typeof(string)); 
dtQuoteDtl.Columns.Add("LineDesc", typeof(string)); 
dtQuoteDtl.PrimaryKey = new DataColumn[] { dtQuoteDtl.Columns["QuoteNum"], dtQuoteDtl.Columns["QuoteLine"] }; 
dsQuote.Tables.AddRange(new DataTable[] { dtQuoteHed, dtQuoteDtl }); 
dsQuote.Relations.Add(new DataRelation("relQuoteHedtoQuoteDtl", dtQuoteHed.Columns["QuoteNum"], dtQuoteDtl.Columns["QuoteNum"])); 

//FILL THE DATASET - ROWS HAVE BEEN VALIDATED 

DataGrid DataG = (DataGrid)this.FindControl("QuotesGrid"); 
DataG.ItemDataBound += new DataGridItemEventHandler(this.OnMainGridDataBound); 
DataG.DataSource = dsQuote.Tables["dtQuoteHed"]; 
dsQuote.WriteXmlSchema("C:\\test.xml"); 
DataG.DataBind(); 

//EVENT HANDLER 
private void OnMainGridDataBound(object sender, DataGridItemEventArgs e) 
{ 
if (e.Item.ItemType == ListItemType.AlternatingItem || e.Item.ItemType == ListItemType.Item) 
    { 
     DataGrid obCtl = (DataGrid)e.Item.FindControl("QuoteLines_Grid"); 
     if (null != obCtl && obCtl is DataGrid) 
     {          
      obCtl.DataSource = dsQuote.Tables["dtQuoteDtl"].Select("QuoteNum=" + ((DataRowView)e.Item.DataItem).Row["QuoteNum"]); 
      obCtl.DataMember = "dtQuoteDtl"; 
      obCtl.DataBind(); // THIS IS WHERE I GET THE ERROR! - COLUMN EXISTS!! 
     } 
    } 
} 

//這是XML

<?xml version="1.0" standalone="yes"?> 
<xs:schema id="dsQuote" xmlns="" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata"> 
    <xs:element name="dsQuote" msdata:IsDataSet="true" msdata:UseCurrentLocale="true"> 
    <xs:complexType> 
     <xs:choice minOccurs="0" maxOccurs="unbounded"> 
     <xs:element name="dtQuoteHed"> 
      <xs:complexType> 
      <xs:sequence> 
       <xs:element name="QuoteNum" type="xs:int" /> 
       <xs:element name="TerritoryTerritoryDesc" type="xs:string" minOccurs="0" /> 
       <xs:element name="DueDate" type="xs:dateTime" minOccurs="0" /> 
       <xs:element name="BTCustID" type="xs:string" minOccurs="0" /> 
       <xs:element name="CustomerName" type="xs:string" minOccurs="0" /> 
       <xs:element name="QuoteAmt" type="xs:decimal" minOccurs="0" /> 
      </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     <xs:element name="dtQuoteDtl"> 
      <xs:complexType> 
      <xs:sequence> 
       <xs:element name="QuoteNum" type="xs:int" /> 
       <xs:element name="QuoteLine" type="xs:int" /> 
       <xs:element name="PartNum" type="xs:string" minOccurs="0" /> 
       <xs:element name="LineDesc" type="xs:string" minOccurs="0" /> 
      </xs:sequence> 
      </xs:complexType> 
     </xs:element> 
     </xs:choice> 
    </xs:complexType> 
    <xs:unique name="Constraint1" msdata:PrimaryKey="true"> 
     <xs:selector xpath=".//dtQuoteHed" /> 
     <xs:field xpath="QuoteNum" /> 
    </xs:unique> 
    <xs:unique name="dtQuoteDtl_Constraint1" msdata:ConstraintName="Constraint1" msdata:PrimaryKey="true"> 
     <xs:selector xpath=".//dtQuoteDtl" /> 
     <xs:field xpath="QuoteNum" /> 
     <xs:field xpath="QuoteLine" /> 
    </xs:unique> 
    <xs:keyref name="relQuoteHedtoQuoteDtl" refer="Constraint1"> 
     <xs:selector xpath=".//dtQuoteDtl" /> 
     <xs:field xpath="QuoteNum" /> 
    </xs:keyref> 
    </xs:element> 
</xs:schema> 

在所選數據源上找不到名爲'QuoteLine'的字段或屬性。 圖片鏈接在這裏:data source error

但我已驗證該字段存在。

圖片鏈接在這裏:Column Debug

正如你看到的我甚至增加了一個「QuoteLine」字段的數據表dtQuoteHed但是這使得沒有任何區別...

沒有任何人有任何想法,我我錯了嗎?

非常感謝!

回答

0

看這個部分:

DataTable dtQuoteHed = new DataTable("dtQuoteHed"); 
dtQuoteHed.Columns.Add("QuoteNum", typeof(int)); 
dtQuoteHed.Columns.Add("QuoteLine", typeof(int)); 

您的dtQuoteHed表,但在架構dtQuoteHed元素定義Quoteline列沒有Quoteline子元素。因此將其從dtQuoteHed數據表中刪除:

DataSet dsQuote = new DataSet("dsQuote"); 
DataTable dtQuoteHed = new DataTable("dtQuoteHed"); 
dtQuoteHed.Columns.Add("QuoteNum", typeof(int)); 
dtQuoteHed.Columns.Add("TerritoryTerritoryDesc", typeof(string)); 
dtQuoteHed.Columns.Add("DueDate", typeof(DateTime)); 
dtQuoteHed.Columns.Add("BTCustID", typeof(string)); 
dtQuoteHed.Columns.Add("CustomerName", typeof(string));  
dtQuoteHed.Columns.Add("QuoteAmt", typeof(decimal)); 
dtQuoteHed.PrimaryKey = new DataColumn[] { dtQuoteHed.Columns["QuoteNum"] }; 
相關問題