在这个数据集中,我想检查男孩的数量、女孩的数量和总数。数据集返回Table[1]
,它有两行,女孩的数量和男孩的数量。row[0][1]
返回女孩的数量,row[1][1]
返回男性的数量
但只要Table1
返回单个行,即男孩或女孩的计数,就会在第一个if
处抛出IndexOutOfRangeException
。
检查空数据行的方法是否正确?
这是代码片段
if (dsStudent != null && dsStudent.Tables.Count > 0 && dsStudent.Tables[0].Rows.Count > 0)
{
if (!(dsStudent.Tables[1].Rows[0]==null) && !(dsStudent.Tables[1].Rows[1]==null)) //both are present
{
lblbNumOfGirls.Text = dsStudent.Tables[1].Rows[0][1].ToString().Trim();
lblNumOfBoys.Text = dsStudent.Tables[1].Rows[1][1].ToString().Trim();
}
else if ((dsStudent.Tables[1].Rows[0][1].Equals(string.Empty))) //if girls are 0
{
lblbNumOfGirls.Text="0";
lblNumOfBoys.Text = dsStudent.Tables[1].Rows[1][1].ToString().Trim();
}
else //if boys are 0
{
lblNumOfBoys.Text="0";
lblbNumOfGirls.Text = dsStudent.Tables[1].Rows[0][1].ToString().Trim();
}
lblNumStudents.Text = (int.Parse(lblNumOfBoys.Text) + int.Parse(lblbNumOfGirls.Text)).ToString(); //total number of students
}
1条答案
按热度按时间gg58donl1#
如果
Table1
只返回1行,则该1行的索引为“0”。这就是您遇到Index out of bound
问题的原因。如果您仅在有两行或更多行(一行用于男性,一行用于女性和其他)时运行代码,则检查应为
dsStudent.Tables[0].Rows.Count > 1
因为您的检查是
dsStudent.Tables[0].Rows.Count > 0
,所以当只有1行时,您的代码将进入if语句,但当您尝试访问第二行dsStudent.Tables[1].Rows[1][1].ToString().Trim()
时,将引发异常记住,count和index在编码上是不同的。
--编辑--
好的,我明白了。问题是你正在阅读
Table1
,但是没有先对它进行变量化。这是抛出异常的代码行:
您正在阅读
Rows[0]
和Rows[1]
,但该行可能不存在。例如,如果您的表只包含1行,条件
dsStudent.Tables[1].Rows[1]
的第二部分将引发异常,因为Rows[1]
不存在。要检查表是否至少包含两行,最简单的方法是:
我的建议是检查if语句中的男孩和女孩。
同样,如果值为空,则不能将其与
String.Empty
进行比较NULL
不等于String.Empty