我正在尝试从包含24个月客户付款历史记录的数据表构建一个html表。但是,仅返回第一行数据(最近一次付款)并重复24次。在查询构建器中运行时,Select语句返回24个不同的行。是foreach循环写自己?我不认为我只用24行超载了stringbuilder。我尝试添加AppendLine();但它并没有改变任何东西。
//get account history
String strConnString7 = WebConfigurationManager.ConnectionStrings["billing_webConnectionString"].ConnectionString;
SqlConnection con7 = new SqlConnection(strConnString7);
SqlCommand cmd7 = new SqlCommand("SELECT * FROM dbo.WEB_HISTORY WHERE acct_nbr ='" + AcctNbr + "'ORDER BY billing_date DESC", con7);
cmd7.Parameters.Add("conn_nbr", SqlDbType.VarChar).Value = Session["AcctNum"];
cmd7.Connection = con7;
SqlDataAdapter da7 = new SqlDataAdapter(cmd7);
DataTable dtHistory = new DataTable();
da7.Fill(dtHistory);
if (dtHistory != null && dtHistory.Rows.Count > 0)
{
string Billing_Date = String.Format("{0:d}", dtHistory.Rows[0]["billing_date"]);
string W_Cons = dtHistory.Rows[0]["w_cons"].ToString();
string W_Curr_Chrg = String.Format("{0:0.00}", dtHistory.Rows[0]["w_curr_chrg"]);
string S_Curr_Chrg = String.Format("{0:0.00}", dtHistory.Rows[0]["s_curr_chrg"]);
string Adjs = String.Format("{0:0.00}", dtHistory.Rows[0]["adjs"]);
string Pay = String.Format("{0:0.00}", dtHistory.Rows[0]["pay"]);
string Return_pay = String.Format("{0:0.00}", dtHistory.Rows[0]["return_pay"]);
System.Text.StringBuilder sb = new System.Text.StringBuilder();
int counter = 0;
foreach (DataRow row in dtHistory.Rows)
{
sb.Append("<tr><td>" + Billing_Date + "</td><td>" + W_Cons + "</td><td>" + W_Curr_Chrg + "</td><td>" + S_Curr_Chrg + "</td><td>" + Adjs + "</td><td>" + Pay + "</td><td>" + Return_pay + "</td></tr>");
}
History.Text = sb.ToString();
//Counter.Text = counter.ToString();
con7.Close();
}
答案 0 :(得分:1)
您遍历每一行,但只设置Billing_Date
,W_Cons
,W_Curr_Chrg
,S_Curr_Chrg
,Adjs
,Pay
和Return_pay
一次:
string Billing_Date = String.Format("{0:d}", dtHistory.Rows[0]["billing_date"]);
string W_Cons = dtHistory.Rows[0]["w_cons"].ToString();
string W_Curr_Chrg = String.Format("{0:0.00}", dtHistory.Rows[0]["w_curr_chrg"]);
string S_Curr_Chrg = String.Format("{0:0.00}", dtHistory.Rows[0]["s_curr_chrg"]);
string Adjs = String.Format("{0:0.00}", dtHistory.Rows[0]["adjs"]);
string Pay = String.Format("{0:0.00}", dtHistory.Rows[0]["pay"]);
string Return_pay = String.Format("{0:0.00}", dtHistory.Rows[0]["return_pay"]);
当您遍历各行时,您每次都会附加它们,但您实际上并没有更新它们 - 因此它们的值永远不会从您最初设置的值更改。
foreach (DataRow row in dtHistory.Rows)
{
sb.Append("<tr><td>" + Billing_Date + "</td><td>" + W_Cons + "</td><td>" + W_Curr_Chrg + "</td><td>" + S_Curr_Chrg + "</td><td>" + Adjs + "</td><td>" + Pay + "</td><td>" + Return_pay + "</td></tr>");
}
您需要在该循环中更新其值。
答案 1 :(得分:1)
您在foreach
循环中使用固定数据。
例如,Billing_Date
设置在循环外部的顶部,因此将始终包含相同的值。
循环需要访问您的row
变量以从每行获取数据。
答案 2 :(得分:1)
你正在遍历每一行:
foreach (DataRow row in dtHistory.Rows)
但在你的循环中,你永远不会使用那个row
对象
sb.Append("<tr><td>" + Billing_Date + "</td><td>" + W_Cons + "</td><td>" + W_Curr_Chrg + "</td><td>" + S_Curr_Chrg + "</td><td>" + Adjs + "</td><td>" + Pay + "</td><td>" + Return_pay + "</td></tr>");
而不是Billing_Date
我假设你想要row["billing_date"]
等等。
另外,您在sb.Append
内进行了大量的字符串连接。您应该单独附加每个项目,避免繁重的连接。
答案 3 :(得分:0)
这是因为以下所有变量都包含对Rows[0]
值的引用。您需要更改它以检索相应数据行的值并构建StringBuilder。
string Billing_Date = String.Format("{0:d}", dtHistory.Rows[0]["billing_date"]);
string W_Cons = dtHistory.Rows[0]["w_cons"].ToString();
string W_Curr_Chrg = String.Format("{0:0.00}", dtHistory.Rows[0]["w_curr_chrg"]);
string S_Curr_Chrg = String.Format("{0:0.00}", dtHistory.Rows[0]["s_curr_chrg"]);
string Adjs = String.Format("{0:0.00}", dtHistory.Rows[0]["adjs"]);
string Pay = String.Format("{0:0.00}", dtHistory.Rows[0]["pay"]);
string Return_pay = String.Format("{0:0.00}", dtHistory.Rows[0]["return_pay"]);
因此,您的if
声明将变为
if (dtHistory != null && dtHistory.Rows.Count > 0)
{
System.Text.StringBuilder sb = new System.Text.StringBuilder();
foreach (DataRow row in dtHistory.Rows)
{
string Billing_Date = String.Format("{0:d}", row["billing_date"]);
string W_Cons = dtHistory.row["w_cons"].ToString();
string W_Curr_Chrg = String.Format("{0:0.00}", row["w_curr_chrg"]);
string S_Curr_Chrg = String.Format("{0:0.00}", row["s_curr_chrg"]);
string Adjs = String.Format("{0:0.00}", row["adjs"]);
string Pay = String.Format("{0:0.00}", row["pay"]);
string Return_pay = String.Format("{0:0.00}", row["return_pay"]);
sb.Append("<tr><td>" + Billing_Date + "</td><td>" + W_Cons + "</td><td>" + W_Curr_Chrg + "</td><td>" + S_Curr_Chrg + "</td><td>" + Adjs + "</td><td>" + Pay + "</td><td>" + Return_pay + "</td></tr>");
}
History.Text = sb.ToString();
con7.Close();
}