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