如何将数据从数据库中随机添加到按钮的文本属性中

时间:2013-12-31 02:45:55

标签: c# asp.net linq webforms

我正在开展一个测验项目。我正在使用4个用CSS设置样式的asp按钮,我使用这4个按钮作为答案,在按钮的文本字段中使用正确或错误的答案。我已经阅读并发现了另一篇与此非常相似的帖子,但答案是使用字典列表。我确信我不需要使用列表,我应该能够随机分配text属性。这是我用来添加按钮文本属性的答案的代码,但我需要随机化答案的位置,因为在同一个按钮中始终有正确的答案是不对的。

lblQuestion.Text = ds.Tables[0].Rows[myNum]["Question"].ToString();
btn1.Text = ds.Tables[0].Rows[myNum]["CorrectAnswer"].ToString();
btn2.Text = ds.Tables[0].Rows[myNum]["WrongAnswer1"].ToString();
btn3.Text = ds.Tables[0].Rows[myNum]["WrongAnswer2"].ToString();
btn4.Text = ds.Tables[0].Rows[myNum]["WrongAnswer3"].ToString(); 

每个按钮都有一个onlick方法,可以更改为下一个问题,并将按钮文本更改为下一个答案。此代码位于每个buttonclick事件中......

protected void btn1_Click(object sender, EventArgs e)
{
    lblQuestion.Text = ds.Tables[0].Rows[myNum]["Question"].ToString();
    btn1.Text = ds.Tables[0].Rows[myNum]["CorrectAnswer"].ToString();
    btn2.Text = ds.Tables[0].Rows[myNum]["WrongAnswer1"].ToString();
    btn3.Text = ds.Tables[0].Rows[myNum]["WrongAnswer2"].ToString();
    btn4.Text = ds.Tables[0].Rows[myNum]["WrongAnswer3"].ToString();

    myNum = myNum + 1;
 }

我不确定但也许我需要能够使用一种方法来随机化所有按钮文本而不是编码到每个buttonclick事件中?

由于

1 个答案:

答案 0 :(得分:1)

我写了一个简单的子程序来演示如何随机排序字符串然后将它们附加到按钮上。此示例仅演示如何在屏幕上的4个可能位置之间随机化正确答案的位置。

    static void Main()
    {

        // create array of 4 string (or answers in your case)
        //string[] array = new string[4] { "apple", "banana", "cranberry", "dragon fruit" };            
        string[] array = new string[4] {
            ds.Tables[0].Rows[myNum]["CorrectAnswer"].ToString(),
            ds.Tables[0].Rows[myNum]["WrongAnswer1"].ToString(),
            ds.Tables[0].Rows[myNum]["WrongAnswer2"].ToString(),
            ds.Tables[0].Rows[myNum]["WrongAnswer3"].ToString(),
        };

        // randomize the ordering of the items
        System.Random rnd = new System.Random();
        array = array.OrderBy(x => rnd.Next()).ToArray();

        // each time you run this, the correct answer will be in a different place:
        btn1.Text = array[0];
        btn2.Text = array[1]; 
        btn3.Text = array[2];
        btn4.Text = array[3];

    }

奖励回答,您也可以将多个按钮连接到单个Event Handler。进入处理程序后,您可以访问引发事件的Button并执行操作:

protected void Page_Load(object sender, EventArgs e)
{
    // attach event handlers
    Button1.Click += ButtonClick;
    Button2.Click += ButtonClick;
    Button3.Click += ButtonClick;
    Button4.Click += ButtonClick;
}

private void ButtonClick(object sender, EventArgs e)
{
    // your code here...

    // this is the button that raised the event
    Button button = (Button)sender;    
    // check its ID? you could also check its text, perform any actions you wish, etc.    
    if (button.ID == "Button1")
    {
        System.Diagnostics.Debug.Print("Button 1 Clicked!");
    }
}