0

ゲームのリソース ファイルから xml ファイルを読み取る小さなデスクトップ アプリケーション (Visual Studio を使用) を作成しようとしています。これらのファイルは XML で保存されます。ファイルを datagridview に読み込もうとすると、次のエラーが表示されます。

System.ArgumentException: Child list for field SpaceUnitsCapital cannot be created.
at System.Windows.Forms.BindingContext.EnsureListManager(Object dataSource, String dataMember)
at System.Windows.Forms.DataGridView.DataGridViewDataConnection.SetDataConnection(Object dataSource, String dataMember)
at System.Windows.Forms.DataGridView.set_DataMember(String value)
at SWFOC.Form1.clk(Object sender, EventArgs e) in C:\Users\Number6\documents\visual studio 2012\Projects\SWFOC\SWFOC\Form1.vb:line 37

これを試みるために使用するコードは次のとおりです。

Dim URL As String = "C:\Program Files (x86)\LucasArts\Star Wars Empire at War Forces of Corruption\Data\XML\Spaceunitscapital.xml"
    Dim ds As DataSet = New DataSet()
    Dim fsReadXml As System.IO.FileStream = New System.IO.FileStream(URL, System.IO.FileMode.Open)

    Try
        ds.ReadXml(fsReadXml)
        DataGridView1.DataSource = ds
        DataGridView1.DataMember = "SpaceUnitsCapital"
    Catch Err As Exception
        RichTextBox1.Text = Err.ToString
    Finally
        fsReadXml.Close()
    End Try

xml ファイルの例を次に示します。

<?xml version="1.0"?>
<SpaceUnitsCapital>

<SpaceUnit Name="Calamari_Cruiser">
    <Text_ID>TEXT_UNIT_CALAMARI_CRUISER</Text_ID>
    <Encyclopedia_Good_Against> Victory_Destroyer Acclamator_Assault_Ship Interceptor4_Frigate </Encyclopedia_Good_Against>
    <Encyclopedia_Vulnerable_To> TIE_Bomber Skipray_Blastboat </Encyclopedia_Vulnerable_To>
    <GUI_Row> 1 </GUI_Row>
    <Space_Model_Name>RV_MONCALCRUISER.ALO</Space_Model_Name>
    <Select_Box_Scale>600</Select_Box_Scale>
    <Select_Box_Z_Adjust>-50</Select_Box_Z_Adjust>
    <Mass>0.995</Mass>
    <Scale_Factor>1.1</Scale_Factor>
    <Damage>60</Damage>
    <Dense_FOW_Reveal_Range_Multiplier>0.24</Dense_FOW_Reveal_Range_Multiplier>
    <Visible_On_Radar_When_Fogged>true</Visible_On_Radar_When_Fogged>
    <Multisample_FOW_Check>Yes</Multisample_FOW_Check>
    <Ranking_In_Category>5</Ranking_In_Category>
    <Max_Speed>1.5</Max_Speed>
    <Max_Rate_Of_Turn>0.4</Max_Rate_Of_Turn>
    <MovementClass> Space </MovementClass>
    <Space_Layer> Capital </Space_Layer>
    <Layer_Z_Adjust>-290.0</Layer_Z_Adjust>
    <OverrideAcceleration> .02 </OverrideAcceleration>
    <OverrideDeceleration> .02 </OverrideDeceleration>

    <Armor_Type> Armor_Calamari_Cruiser </Armor_Type>
    <Shield_Armor_Type>Shield_Capital</Shield_Armor_Type>
    <Max_Rate_Of_Roll>0.2</Max_Rate_Of_Roll>
    <Bank_Turn_Angle>25</Bank_Turn_Angle>   
    <Max_Thrust>0.2</Max_Thrust>
    <Hyperspace>Yes</Hyperspace>
    <Hyperspace_Speed>1</Hyperspace_Speed>
    <Maintenance_Cost>0.3</Maintenance_Cost>
</SpaceUnit>
</SpaceUnitsCapital>

データメンバーを埋める行なしでコードを実行しようとすると、エラーはスローされませんが、他にも何もしません。DGV に値が設定されることはありません。

このエラーを回避する方法を知っている人はいますか? 最終的な結果は、フィールドをなんらかの形でアプリに入力し、編集して保存できるようにすることです。アイデアがあれば、他の方法を受け入れることができます。

前もって感謝します、クリス

4

2 に答える 2

2

あなたのコメントに基づいて、私のコメントがうまくいったので、ここで私の解決策を繰り返します:

DataGridView1.DataSource = ds.Tables(0)

なぜ私のコードが機能したのかという質問は、実際にはデータセットとデータテーブルの違いに関する質問です。
データセットはデータテーブルのセットであると考えることができます。つまり、データセットがデータベースのようなものであり、データテーブルがそのデータベース内のテーブルであると想像できます。
したがって、一連のテーブルではなく、データテーブルをグリッドにデータソースとして設定する必要があります

于 2013-05-30T20:28:29.353 に答える