使用 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,没有错误。同样,如果我使用只有一个 child
的 parentsID
登录,那么它会显示 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 = "-";
}
}
}
}
欢迎提出任何建议。
我无法在带有标签的 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,没有错误。同样,如果我使用只有一个 child
的 parentsID
登录,那么它会显示 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 = "-";
}
}
}
}
欢迎提出任何建议。