使用 dt.Rows 在标签中显示多行

Displaying multiple rows in labels using dt.Rows

我无法在带有标签的 table 中显示带有 if-else 的 non-existent 行。

我目前使用此 parentsID 登录(登录为 New 会话)有两个 children(两行)并且 [=14= 没有问题] 和 dt.Rows[1] 除了我在 dt.Rows[2] 和这个 Error: System.IndexOutOfRangeException: There is no row at position 2. 得到错误至于 parentsID 和三个 children,没有错误。同样,如果我使用只有一个 childparentsID 登录,那么它会显示 There is no row at position 1.

我该如何解决这个问题?我的英语不好,如果有语法错误请见谅。

我有一个 table 叫做 family,每个人都在里面。所有行都有 childID(他们的用户名)和 parentsID。一些 child 可以是其他 childs.

parent
        try
        {

            string query = "select * from family where parentsID = '" + Session["New"] + "'";
            using (OleDbCommand cmd3 = new OleDbCommand(query, con))
            {
                con.Open();
                OleDbDataReader myReader3 = null;
                myReader3 = cmd3.ExecuteReader();

                if (myReader3.HasRows)
                {
                    DataTable dt = new DataTable();
                    dt.Load(myReader3);

                    if (!DBNull.Value.Equals(dt.Rows[0]["childID"]))
                    {
                        label1.Text = dt.Rows[0]["childID"].ToString();
                        label2.Text = "$" + Convert.ToDecimal(dt.Rows[0]["childNetWorth"]).ToString("N2");
                        label3.Text = dt.Rows[0]["childName"].ToString();
                    }
                    else
                    {
                        label1.Text = "-ID-";
                        label2.Text = "-";
                        label3.Text = "-";
                    }

                    if (!DBNull.Value.Equals(dt.Rows[1]["childID"]))
                    {
                        label5.Text = dt.Rows[1]["childID"].ToString();
                        label6.Text = "$" + Convert.ToDecimal(dt.Rows[1]["childNetWorth"]).ToString("N2");
                        label7.Text = dt.Rows[1]["childName"].ToString();
                    }
                    else
                    {
                        label5.Text = "-ID-";
                        label6.Text = "-";
                        label7.Text = "-";
                    }

                    if (!DBNull.Value.Equals(dt.Rows[2]["childID"]))
                    {
                        label9.Text = dt.Rows[2]["childID"].ToString();
                        label10.Text = "$" + Convert.ToDecimal(dt.Rows[2]["childNetWorth"]).ToString("N2");
                        label11.Text = dt.Rows[2]["childName"].ToString();

                    }
                    else
                    {
                        label9.Text = "-ID-";
                        label10.Text = "-";
                        label11.Text = "-";
                    }
                }
            }
        }

        catch (Exception ex)
        {
            Response.Write("Error: " + ex.ToString());
        }
        finally
        {
            con.Close();

        }

使用 for 循环迭代 DataTable 内容可能会避免这样的 IndexOutOfRangeException 麻烦,例如这个例子:

if (myReader3.HasRows)
{
     DataTable dt = new DataTable();
     dt.Load(myReader3);

     for (int i = 0; i < dt.Rows.Count; i++)
     {
         // label assignments here
     }
}

根据 dt.Rows.Count 值,如果 i 达到最大计数值,迭代会自动停止,因此 dt.Rows[i] 调用不会抛出异常。

然而,正如 Jon Skeet 在 loop through an array of given labels post 中提到的,即使借助数组索引(例如 { 1, 5, 7 } 对于 childID 个标签)。到目前为止,这是我迭代 DataTable 内容然后根据需要将值分配给不同标签的工作:

if (myReader3.HasRows)
{
     DataTable dt = new DataTable();
     dt.Load(myReader3);

     for (int i = 0; i < dt.Rows.Count; i++)
     {
         if (!DBNull.Value.Equals(dt.Rows[i]["childID"]))
         {
             if (i == 0)
             {
                 label1.Text = dt.Rows[i]["childID"].ToString();
                 label2.Text = "$" + Convert.ToDecimal(dt.Rows[i]["childNetWorth"]).ToString("N2");
                 label3.Text = dt.Rows[i]["childName"].ToString();
             }
             else if (i == 1)
             {
                 label5.Text = dt.Rows[i]["childID"].ToString();
                 label6.Text = "$" + Convert.ToDecimal(dt.Rows[i]["childNetWorth"]).ToString("N2");
                 label7.Text = dt.Rows[i]["childName"].ToString();
             }
             else if (i == 2)
             {
                 label9.Text = dt.Rows[i]["childID"].ToString();
                 label10.Text = "$" + Convert.ToDecimal(dt.Rows[i]["childNetWorth"]).ToString("N2");
                 label11.Text = dt.Rows[i]["childName"].ToString();
             }
         }
         else
         {
             if (i == 0)
             {
                 label1.Text = "-ID-";
                 label2.Text = "-";
                 label3.Text = "-";
             }
             else if (i == 1)
             {
                 label5.Text = "-ID-";
                 label6.Text = "-";
                 label7.Text = "-";
             }
             else if (i == 2)
             {
                 label9.Text = "-ID-";
                 label10.Text = "-";
                 label11.Text = "-";
             }
         }
     }
}

欢迎提出任何建议。