【问题标题】:C# How to make a foreach loop not override a string variableC#如何使foreach循环不覆盖字符串变量
【发布时间】:2017-10-16 12:20:59
【问题描述】:

我正在尝试将 PHP 项目传递给 ASP.NET,并且正在进行一些测试。回到怀疑,我已经完成了这段代码:

using System;
using System.Configuration;
using System.Data;
using MySql.Data.MySqlClient;

namespace project_t
{
    public partial class _Default : System.Web.UI.Page
    {
        public string level_text;

        public void Page_Load(object sender, EventArgs e) => people_box_repeater_method();

        public void people_box_repeater_method()
        {
            using (MySqlConnection mysql_connection = new MySqlConnection(ConfigurationManager.ConnectionStrings["DefaultConnection"].ConnectionString))
            {
                MySqlDataAdapter mysql_data_adapter = new MySqlDataAdapter("SELECT * FROM employees", mysql_connection);
                DataTable data_table = new DataTable();
                mysql_data_adapter.Fill(data_table);

                DataView data_view = new DataView(data_table);
                data_view.Sort = "name";
                data_view.Sort = "function";
                data_view.Sort = "sector";
                data_view.Sort = "location";
                data_view.Sort = "mail";
                data_view.Sort = "phone";
                data_view.Sort = "photo";
                people_box_repeater.DataSource = data_view;
                people_box_repeater.DataBind();

                string vartest = "4";
                foreach (DataRow data_row in data_table.Rows) {
                    if ((string)data_row["level"] == vartest) { level_text = (string)data_row["level"]; System.Diagnostics.Debug.WriteLine(data_row["level"]); }
                }
            }
        }
    }
}

我的问题出在这部分:

string vartest = "4";
foreach (DataRow data_row in data_table.Rows) {
    if ((string)data_row["level"] == vartest) { level_text = (string)data_row["level"]; System.Diagnostics.Debug.WriteLine(data_row["level"]); }
}

我放了两个数据输出,一个在我的 html 代码为 <% = level_text%> 的 .aspx 页面上,另一个在输出控制台上。

在我的数据库中,我有四行的“级别”列中的值为“4”。 At the console output, it returns me four rows corresponding to the database.

Now in the .aspx page the number "4" appears once. 我想在控制台输出中出现四倍的数字“4”。我做错了什么?

【问题讨论】:

  • 连续 7 次调用对同一个 DataView 进行排序,你想做什么?
  • 在创建DataView 并将DataView 分配为DataSource 之前 执行您的DataTable 操作。换句话说,在`mysql_data_adapter.Fill(data_table);`之后移动你的3个“有问题的”行。
  • 它是正确的。您正在用值“4”替换变量的值,因此最后在该变量中有“4”。如果要连接输出,请使用 label_text += value。
  • 您将获得level_text 中的最后一个值,因为您使用的是相同的变量。尝试使用 List 并保存所有匹配的数据并在客户端运行 foreach 循环以一次显示所有数据。
  • @Steve 连续 7 次排序调用已修复,+= value 工作正常,谢谢!

标签: c# mysql asp.net visual-studio row


【解决方案1】:

每当您的 if 语句为真时,您都会这样做。 level_text = (string)data_row["level"]; 这意味着它每次都设置为相同的值。 如果使用 += 而不是 = 它会在字符串中添加一些内容。

例如,您的代码现在正在执行 level_text = 4;每次使用 += 你会得到 level_text=4444

【讨论】:

    猜你喜欢
    • 2020-11-15
    • 1970-01-01
    • 1970-01-01
    • 2017-05-26
    • 2022-01-13
    • 2021-08-13
    • 2016-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多