1

XMLノードリストのタグの1つが欠落している場合、グリッドビューのバインドで問題が発生します。以下のエラーメッセージが表示されます:

選択したデータソースに「SUMMARY」という名前のフィールドまたはプロパティが見つかりませんでした。

「要約がありません」などのカスタムテキストメッセージを表示できるように、バインド中に欠落している値を処理する方法を誰かに教えてください。

.NETバージョン3.5を使用しており、XMLデータからGridViewをバインドしています。

ASPXコード:

            <asp:GridView ID="gvSystemX" runat="server" AutoGenerateColumns="False" AlternatingRowStyle-CssClass="even"
        CellPadding="4" Font-Names="Tahoma" Font-Size="Small" ForeColor="#333333" GridLines="None" EmptyDataText="Mayur">
        <RowStyle BackColor="#E3EAEB" />
        <Columns>
            <asp:BoundField HeaderText="TITLE" DataField="AZKTITLE" />
            <asp:BoundField HeaderText="DESCRIPTION" DataField="AZKSUMMARY" />
            <asp:BoundField HeaderText="SOURCE" DataField="AZKSOURCE" />
            <asp:BoundField HeaderText="DATABASE NAME" DataField="DREDBNAME" />
        </Columns>
        <FooterStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />
        <PagerStyle BackColor="#666666" ForeColor="White" HorizontalAlign="Center" />
        <SelectedRowStyle BackColor="#C5BBAF" Font-Bold="True" ForeColor="#333333" />
        <HeaderStyle BackColor="#1C5E55" Font-Bold="True" ForeColor="White" />
        <EditRowStyle BackColor="#7C6F57" />
        <AlternatingRowStyle CssClass="even"></AlternatingRowStyle>
    </asp:GridView>

コードビハインド:

応答オブジェクトで、XMLデータを取得しています...

            XmlNamespaceManager nsMgr = new XmlNamespaceManager(response.NameTable);
            nsMgr.AddNamespace("autn", "http://schemas.autonomy.com/aci/");

            nodeList = response.SelectNodes("autnresponse/responsedata/autn:hit/autn:content/DOCUMENT", nsMgr);
            gvSystemX.DataSource = ConvertToDataTable(nodeList);
            gvSystemX.DataBind();
4

1 に答える 1

1

もちろん、このエラーは、DataTableのDataRowに列の要約(AZKSUMMARY)がないためです。これは、ConvertToDataTableメソッドで解決できます。そこでは、既存のすべてのノードの列を作成していると仮定します。

xmlファイルに存在しない場合でも、すべての行に対して4つの列すべてを作成する必要があります。終了しない場合は、「要約はありません」など、必要な値を追加できます。

さらに良いのは、4つのプロパティを持つオブジェクトを実装し、それらをリストに入れることです。ただし、必要に応じてデータテーブルに固執してください。

于 2012-01-13T10:38:53.510 に答える