2014-02-07 44 views
0

我从数据库中添加了一些字符串到列表中,我随机的字符串顺序和显示它,但我不想随机字符串再次出现,所以我做了删除(字符串)但它不会工作。不想从列表字符串重复随机

因此,我宣布一个列表的字符串是这样的:

List<string> questionNo = new List<string>(); 

这是我摆在pageLoad的代码(Page.IsPostBack之外!):

protected void RandomMCQ1() 
{ 
    Random r = new Random(); 
    int index = r.Next(questionNo.Count()); 
    randomString = questionNo[index]; // Random a string from list (I declare randomString as a string in global) 
    questionNo.Remove(randomString); // Then remove it 
} 

所以我想测试它通过一个按钮点击这样的后显示randomString:

protected void btnNext_Click(object sender, EventArgs e) 
    { 
     Response.Write(questionNo.Count); // Display list<string> count 
     Response.Write(randomString); // Display the random string . 
    } 

我有2个值在列表中:10和11

因此列表的计数为2 当我点击按钮的计数是正确的(假设为2,i之后点击按钮的计数,它减少到1) 但随机字符串可显示10或11,不应该是当我第一次点击按钮,它显示10或11,如果它显示10,第二我点击它应该显示的按钮11然后第三次我按它不应该显示什么。

---编辑-----

这是我如何得到我的列表(此代码是在pageLoad的外面!Page.IsPostBack)

protected void PopulateMCQ() 
{ 
    string query = "..."; 

    conn.Open(); 

    SqlCommand cmd = new SqlCommand(query, conn); 
    SqlDataReader dr; 
    dr = cmd.ExecuteReader(); 
    while (dr.Read()) 
    { 
     Label questionID = new Label(); 
     questionID.Text = dr["englishID"].ToString(); 
     questionNo.Add(questionID.Text); // I add the values to the list<string> here 

    } 


    conn.Close(); 

} 
+0

你的例子中缺少一些东西,因为它会出现你永远不会调用RandomMCQ1()'? –

+0

我没有发布,我把RandomMCQ1()在页面加载 – user2376998

+0

我不能把RandomMCQ1()在按钮中,它将重新填充列表每当我按下按钮 – user2376998

回答

0

置换(洗牌)名单,然后从头到尾依次返回元素。这将是实现你想要的最有效的方式。

对于洗牌列表中看到这个问题的代码: Randomize a List<T>

0

最有可能的问题是与如何/当你填充questionNo。由于它只是常规对象,并且没有显示如何在请求之间存储它,所以在请求开始时总是从数据库读取数据的可能性很大。

因此,在第一次GET请求时,您会从列表中获得一些随机值,但对于后续的点击POST请求,您可能会从DB重新加载questionNo,因此它始终显示默认值。

如果确实存在修复问题,您需要坚持您的questionNo和随机选择。最简单的方法是首先将请求保存到Session对象中,然后从Session开始读取。

+0

是的,我从DB在页面加载读取它来填充我的questionNo – user2376998

+0

请指引我一起使用会话,U意味着存储在会话中的值,然后随机会话值? – user2376998

+0

@ user2376998 - 是的。正如我说 - 从DB上第一请求读取,并把在会话状态('会话[“foo”的] = questionNo')。 'questionNo =(列表)会话[ “foo” 的]',供选择类似 - 在回发从'Session'读取。 –