winforms 如何检查单个数据表行是否为空?

t1qtbnec  于 2022-11-17  发布在  其他
关注(0)|答案(1)|浏览(125)

在这个数据集中,我想检查男孩的数量、女孩的数量和总数。数据集返回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
         }
gg58donl

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在编码上是不同的。

Row 1: index = 0
Row 2: index = 1
Row 3: index = 2
...

--编辑--

好的,我明白了。问题是你正在阅读Table1,但是没有先对它进行变量化。
这是抛出异常的代码行:

if (!(dsStudent.Tables[1].Rows[0]==null) && !(dsStudent.Tables[1].Rows[1]==null))

您正在阅读Rows[0]Rows[1],但该行可能不存在。
例如,如果您的表只包含1行,条件dsStudent.Tables[1].Rows[1]的第二部分将引发异常,因为Rows[1]不存在。
要检查表是否至少包含两行,最简单的方法是:

if (dsStudent.Tables[1].Rows.Count >= 2)
{
}

我的建议是检查if语句中的男孩和女孩。
同样,如果值为空,则不能将其与String.Empty进行比较
NULL不等于String.Empty

if (dsStudent.Tables[1].Rows.Count >= 2)
{
    if (DBNull.Value.Equals(dsStudent.Tables[1].Rows[0][1])) //girls = 0
    {
    }
    if (DBNull.Value.Equals(dsStudent.Tables[1].Rows[1][1])) //boys = 0
    {
    }
}

相关问题