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

时间:2018-01-09 19:33:47

标签: c#

第一次搞乱c#,我试图在用户点击它时更改按钮的值。

数据库中有四个名称,当代码执行时,它只显示最后一行中的名称。我希望它以第一个名称开头,然后每次按下该按钮时,它应该显示另一个名称,直到它遍历了数据库中的所有名称。

dataReader = command.ExecuteReader();

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

2 个答案:

答案 0 :(得分:2)

while循环不会像你想象的那样工作。它的作用是循环每个结果并设置按钮文本。它不会在任何地方暂停(因为没有任何东西告诉它应该循环)。所以它只是尽可能快地迭代每个元素。这就解释了为什么你只能看到最后的结果。

你可以做的是在每次按下按钮时增加一个计数器,只使用第n个元素。通过跳过前几个条目或根据您使用的数据库,您只能获取特定的结果条目(在MySQL中,这将是选择查询中的LIMIT和OFFSET)

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

答案 1 :(得分:0)

你可以试试这个。我的表名为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();
    }
}

不要忘记添加using System.Data.SqlClient;

希望这有帮助。