c# - 为什么在单个页面中使用多个 foreach 循环导致第一个 foreach 与 c# 重复?
问题描述
我正在尝试从数据库中的两个单独的表中提取数据。第一个表包含有关服务的信息,第二个表包含有关公司的信息。我为每个列表创建了课程页面,并且我还更新了我的连接字符串以包含相关信息。这是我到目前为止所尝试的方法和结果。
如果我只注释掉第二个 foreach,那么只有第一个会在网站上呈现 - 而且它呈现完美。
如果我只注释掉第一个 foreach,则只有第二个会在网站上呈现 - 它呈现完美。
如果两者都没有被注释掉,那么第一个将按原样呈现在网站上。然后它重复,采用第二个 foreach 的格式,从而复制 foreach。
我尝试过使用 break(); 并收到一条错误消息。我也尝试使用 return();
我在 VisualStudio 2017 中写这个,c#。
private void Page_Load(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["dbconnection"].ConnectionString);
con.Open();
str = "select * from Services where Id != 0";
com = new SqlCommand(str, con);
SqlDataReader reader = com.ExecuteReader();
ArrayList servicesList = ConnectionClass.GetServicesbyId(lblTitle.Text);
StringBuilder sb = new StringBuilder();
foreach (Services services in servicesList)
{
sb.Append(string.Format(@"<div class='col-md-2 col-xs-4'><a href='#'><img class='image-responsive' src='{0}' alt='{1}' /></a><a href='#'><h2>{1}</h2></a><p>{2}</p><a href='#' class='btn btn-lg btn-default btn-block' id='{3}'>{1}</a></div>",
services.service_box_image, services.title, services.service_short_description, services.services_id));
lblTitle.Text = sb.ToString();
}
reader.Close();
con.Close();
str = "select * from Company_Info where Id != 0";
com = new SqlCommand(str, con);
ArrayList companyList = ConnectionClass.GetCompanyInfo(lblTagline.Text);
foreach (Company company in companyList)
{
sb.Append(string.Format(@"<div class='col-md-7'><h1>{0}</h1><p class='lead'>{1}</p>
</div><div class='col-md-1'></ div>",
company.CompanyTaglineShort, company.CompanyTaglineLong, company.CompanyPhoneMain));
lblTagline.Text = sb.ToString();
}
reader.Close();
con.Close();
}
解决方案
对StringBuilder变量调用ToString不会删除 StringBuilder 的内容。数据仍然存在,然后当您继续添加到同一个变量并再次调用 StringBuilder.ToString 方法时,您还将获得在前一个循环中添加的数据。
您只需要清除两个循环之间的变量内容。您应该调用StringBuilder.Clear或只设置StringBuilder.Length = 0;
foreach (Services services in servicesList)
{
.....
}
....
sb.Clear();
....
foreach (Company company in companyList)
{
....
}
此外,正如下面 Hans Kesting 所述,您可能应该在循环之外只写一次标签
foreach (Services services in servicesList)
{
.....
}
lblTitle.Text = sb.ToString()
sb.Clear();
....
foreach (Company company in companyList)
{
....
}
lblTagline.Text = sb.ToString();
推荐阅读
- r - R中带有future_promise的PCA
- javascript - ReactJs:PrivateRoute 组件被调用两次
- android - Android上颜色透明度视图的阴影问题
- r - 将 ts 矩阵列转换回 Date 类
- google-colaboratory - 在 Google Collaboratory 中,告诉 AI/ML 在屏幕上显示/打印它预测的模型的代码是什么?
- ios - 如何控制 SwiftUI List 中新行的动画?
- reactjs - 引导轮播图像不显示
- java - 从 Dataflow Pipeline Options 获取独立的参数字符串
- python - TD Ameritrade API 期权链 获取希腊人的错误值 (Delta,Vega....) -999
- javascript - Node.js,即使条件为假,也表示语句是否运行