次のコードでネストされたデータグリッドがあります。
<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' という名前のフィールドまたはプロパティは、選択したデータ ソースで見つかりませんでした。ここに画像リンク:データ ソース エラー
しかし、フィールドが存在することを確認しました。
ここに画像リンク:列のデバッグ
ご覧のとおり、「QuoteLine」フィールドをデータテーブル dtQuoteHed に追加しましたが、これはまったく違いはありません...
私が間違っているところに誰かアイデアがありますか?
どうもありがとう!