0

時間を割いて私を助けてくれてありがとう!

私は現在2つの問題を抱えており、一方が他方を引き起こしていると思います。基本的に、既存のXMLファイルに追加のノードを挿入し、それをdataGridViewからのデータで埋めようとしています。これが私が変更しようとしているXMLです。「Language」タグを追加する必要があります。

<stentry>
  <index>28</index>
  <sid>PARAM_TITLE1</sid>
  <val>
    <en>Param 1</en>
    <es>parámetro 1</es>
    ***<Language>String<language>***
  </val>
  <params>
    <fontref>187</fontref>
    <numref>0</numref>
    <clip>FALSE</clip>
    <include>FALSE</include>
    <protected>FALSE</protected>
    <cwidth>-1</cwidth>
    <dwidth>0</dwidth>
  </params>
</stentry>

ただし、タグが他の場所で使用されているという問題にも直面しています。

<module>
  ..
  <color>
    <name>DIALOG</name>
    <val>ffd4dbee</val>
   <id>41a</id>
  </color>
  <color>
    <name>WIDGET_FILL</name>
    <val>ffc0c0c0</val>
    <id>41c</id>
 </color>
 ..
</module>

現在、このメソッドを使用してデータを挿入しています。

int n = 0;

XmlNodeList nodeList = xDoc.GetElementsByTagName("val");
foreach (XmlNode node in nodeList)
{
    if (node.OuterXml.Contains("val"))
    {
        XmlElement newElement = xDoc.CreateElement(tag);
        **string data = dataGridView1.Rows[n].Cells[3].Value.ToString();**
        XmlText txtVal = xDoc.CreateTextNode(data);
        XmlNode parent1 = node.ParentNode;
        parent1.AppendChild(newElement);
        parent1.LastChild.AppendChild(txtVal);
        n++;
    }
}

問題は、現時点で、強調表示された行でNullReferenceExceptionが発生することです。これは、必要な場所の前に誤ったタグにデータが入れられているためだと思います。したがって、必要な場所にデータを配置しようとすると、値はnullになります。しかし、私はこれに100%取り組んでいないので、助けを求めてきました。

どうもありがとう!

4

1 に答える 1

1

強調表示した行がをスローしている場合、NullReferenceException障害があるのはXMLではなく、のセルへのアクセスですdataGridView1。その行にブレークポイントを付け、それをヒットしたら、チェーンの下流のプロパティを調べて、どこにnull来るのかを確認します。これは、正確な問題がどこにあるかを確認するのに役立ちます。これを行うには、ブレークポイントがその行にあるときに各プロパティに順番にカーソルを合わせます。

于 2012-08-17T11:55:30.083 に答える