2017-06-24 4 views
0

私はSAXを使用してWindowsフォームのボタンをクリックしてデータベースから請求書XML文書を生成しようとしていますが、「インデックスが範囲外です非負でコレクションのサイズより小さくなければなりません。 "私は何が間違っているのか分かりません。ここで問題とされているコード:[1]:あなたの質問に関してはhttps://i.stack.imgur.com/UsJdG.pngXMLエラーを生成します。追加情報:索引が範囲外です。負でなく、コレクションのサイズより小さくなければならない

var productID = dataGridView1.SelectedRows[0].Cells[0].Value.ToString(); 
var productName = dataGridView1.SelectedRows[0].Cells[1].Value.ToString(); 

wrt.WriteElementString("ItemID",productID); 
wrt.WriteElementString("ItemName", productName); 
+0

エラーはいつ発生しますか?それはどんな出来事ですか?私は、コントロールが構築されているときに、このようなエラーをフォームで見たことがあります。 DGV行は、列が追加されてから0に設定されるまで、最初は-1に設定されます。この変更により、DGVイベントが呼び出されます。したがって、例外を防ぐイベントでは、行数が0より大きいかどうかをテストする必要があります。 – jdweng

+0

@jdweng var productID = dataGridView1.SelectedRows [0] .Cells [0] .Value.ToString();でエラーが発生します。 – randomstudent

+0

@jdweng Err私は行の数が0より大きいかどうかをテストすることで何を意味するのか本当に分かりませんか? – randomstudent

答えて

0

IndexOutOfRangeException occurs when you are trying to access elements that are not within the range or count of the array in question. For example, if your array has 3 elements at all, accessing the fourth item will always fail.

、このタイプのエラーにつながる可能性があるシナリオがいくつかあります。

  1. グリッドで行を選択していないときにselectedRowsにアクセスしようとしました。続行する前にグリッド内の項目を選択したことを確認します。

  2. 行が選択された場合、そのselectedRowの得られた細胞は、知られていないかもしれないので、そのようなアプローチは、私はこの解決策を提案する

を動作しない可能性が。

if(dataGridView1.SelectedRows.Length > 0) 
    { 
     //get all selected rows 
     var rows = dataGridView1.SelectedRows; 

     if(rows.Length > 0) 
     { 
      for (int i = 0; i < rows.Length; i++) 
      { 
       //get cells in individual columns 
       var cells = rows[i].Cells; 

       if(cells.Length > 0) 
       { 
        //productId in cell 1 
        var productId = cells[0].Value.ToString(); 

        //product name in cell 2 
        var productName = cells[1].Value.ToString(); 

        wrt.WriteElementString("ItemID",productId); 
        wrt.WriteElementString("ItemName", productName); 
       } 
      } 
     } 
    } 

これが役に立ちます。

関連する問題

 関連する問題