【问题标题】:Displaying multiple rows in labels using dt.Rows使用 dt.Rows 在标签中显示多行
【发布时间】:2017-06-20 06:52:20
【问题描述】:

我无法在带有标签的表格中使用 if-else 显示不存在的行。

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

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

我有一张名为family 的桌子,里面有所有人。所有行都有childID(他们的用户名)和parentsID。一些child 可以是其他childsparent

        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();

        }

【问题讨论】:

    标签: c# ms-access-2016


    【解决方案1】:

    使用 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 帖子中提到的那样,即使借助数组索引(例如 { 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 = "-";
                 }
             }
         }
    }
    

    欢迎提出任何建议。

    【讨论】:

    • 天哪。太感谢了!标记为答案。非常感谢您的帮助!
    猜你喜欢
    • 1970-01-01
    • 2013-02-08
    • 1970-01-01
    • 2020-06-02
    • 2021-12-14
    • 1970-01-01
    • 2021-07-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多