C# 单击按钮时更改按钮的文本c

C# 单击按钮时更改按钮的文本c,c#,C#,第一次玩c时,我试图在用户单击按钮时更改按钮的值 数据库中有四个名称,当代码执行时,它只显示最后一行中的名称。我希望它以第一个名字开始,然后每次按下按钮都会显示另一个名字,直到它浏览完数据库中的所有名字 dataReader = command.ExecuteReader(); while (dataReader.Read()) { bText = dataReader.GetValue(1).ToString(); button1.Text = bText; } while

第一次玩c时,我试图在用户单击按钮时更改按钮的值

数据库中有四个名称,当代码执行时,它只显示最后一行中的名称。我希望它以第一个名字开始,然后每次按下按钮都会显示另一个名字,直到它浏览完数据库中的所有名字

dataReader = command.ExecuteReader();

while (dataReader.Read())
{
    bText = dataReader.GetValue(1).ToString();
    button1.Text = bText;
}

while循环的工作方式与您认为的不同。它所做的是循环每个结果并设置按钮文本。它不会在任何地方暂停,因为没有任何东西告诉循环它应该暂停。所以它只是尽可能快地迭代每个元素。这解释了为什么您只能看到最后一个结果

您可以做的是将计数器存储在某个位置,每次按下按钮时计数器都会递增,并且只使用第n个元素。通过跳过前几个条目,或者根据您使用的数据库,您只能在MySQL中获取特定的结果条目,这将是select查询中的LIMIT和OFFSET


对于您的特定问题,只有4个条目,我将在应用程序开始时获取所有条目,并将它们存储在一个数组中。然后使用当前索引处的条目=您的计数器设置按钮的文本。

您可以尝试此操作。我的表名为Colors,它有两列:ID和Name

public partial class FrmColor : Form
{
    SqlConnection con = new SqlConnection(@"<YOUR CONNECTION STRING HERE>");
    int pointer = 1;
    int rows = 0;

    public FrmColor()
    {
        InitializeComponent();
    }

    private void btnColor_Click(object sender, EventArgs e)
    {
        SqlCommand cmd = new SqlCommand("Select Name from Colors Where ID = @ID", con);
        cmd.Parameters.AddWithValue("@ID", pointer);

        con.Open();
        SqlDataReader rdr = cmd.ExecuteReader();
        rdr.Read();
        string colorname = rdr.GetValue(0).ToString();
        con.Close();

        btnColor.Text = colorname;

        if (pointer == rows)
        {
            pointer = 1;
        }
        else
        {
            pointer++;
        }
    }

    private void FrmColor_Load(object sender, EventArgs e)
    {
        SqlCommand cmd = new SqlCommand("Select count(Name) From Colors", con);
        con.Open();
        rows = (Int32)cmd.ExecuteScalar();
        con.Close();
    }
}
不要忘记使用System.Data.SqlClient添加


希望这有帮助。

您有许多行和一个按钮。你到底在找什么?它只显示数据库的最后一行where?您是否希望该代码为您生成新按钮或其他内容?不,我只希望每次按一个按钮时都显示一个新名称问题有什么难以理解的?他认为循环将在每次迭代后暂停,直到下次单击按钮。现在有人只需向他解释循环是如何工作的……数据库中有4个名称,当代码执行时,它只显示最后一行中的名称。我希望它以第一个名字开始,然后每次按下按钮都会显示另一个名字,直到它浏览完数据库中的所有名字