Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/261.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 生成XML错误:其他信息:索引超出范围。必须为非负数且小于集合的大小_C#_Xml_Visual Studio_Sax - Fatal编程技术网

C# 生成XML错误:其他信息:索引超出范围。必须为非负数且小于集合的大小

C# 生成XML错误:其他信息:索引超出范围。必须为非负数且小于集合的大小,c#,xml,visual-studio,sax,C#,Xml,Visual Studio,Sax,因此,我试图通过使用SAX单击windows窗体中的一个按钮从数据库生成发票xml文档,但是我不断收到错误“索引超出范围。必须为非负且小于集合的大小”。我不确定是什么问题。以下是问题代码:[1]: 当您试图访问不在所讨论数组的范围或计数内的元素时,会发生IndexOutofFrangeException。例如,如果您的数组总共有3个元素,则访问第四个项目将始终失败 关于您的问题,有两种情况可能会导致此类错误 当您尚未选择网格中的任何行时,尝试访问selectedRows。在继续之前,请确认用户已

因此,我试图通过使用SAX单击windows窗体中的一个按钮从数据库生成发票xml文档,但是我不断收到错误“索引超出范围。必须为非负且小于集合的大小”。我不确定是什么问题。以下是问题代码:[1]:

当您试图访问不在所讨论数组的范围或计数内的元素时,会发生IndexOutofFrangeException。例如,如果您的数组总共有3个元素,则访问第四个项目将始终失败

关于您的问题,有两种情况可能会导致此类错误

  • 当您尚未选择网格中的任何行时,尝试访问
    selectedRows
    。在继续之前,请确认用户已在网格中选择项目

  • 选择行时,所选行的结果单元格可能未知,因此这种方法可能不起作用
  • 我将提出这一解决办法

    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);
                    }
                }
            }
        }
    
    if(dataGridView1.SelectedRows.Length>0)
    {
    //获取所有选定行
    var rows=dataGridView1.SelectedRows;
    如果(rows.Length>0)
    {
    for(int i=0;i0)
    {
    //单元格1中的productId
    var productId=cells[0]。Value.ToString();
    //单元格2中的产品名称
    var productName=cells[1]。Value.ToString();
    wrt.WriteElementString(“ItemID”,productId);
    wrt.WriteElementString(“ItemName”,productName);
    }
    }
    }
    }
    

    希望这有帮助。

    什么时候出错?在任何情况下都是这样吗?在构造控件时,我在表单中看到过类似的错误。DGV行最初设置为-1,直到添加列,然后设置为0。此更改导致调用DGV事件。因此,在防止异常的事件中,必须测试行数是否大于0。@jdweng错误发生在变量productID=dataGridView1.SelectedRows[0].Cells[0].Value.ToString()处@jdweng Err我真的不明白测试行数是否大于0是什么意思?在该行中,SelectedRows.Length==0或SelectedRows[0].Cells.Length==0。使用调试器检查这些集合的长度属性。@除了使用调试器,还有其他方法检查长度吗?我在调试方面没有经验:(
    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);
                    }
                }
            }
        }