2014-03-24 112 views
0

我有一个datagrid视图在我的windows窗体项目中充满了数据..我也有一个按钮(nextButton)被点击通过这些记录。有没有一种方法可以在每次点击下一个按钮时从datagrid视图中选择一个随机记录。在datagridview中选择随机记录

这是填充datagridview的代码。

SqlConnection conn = new SqlConnection(connection); 
     SqlCommand db = new SqlCommand("select * from TblEmp where Emp_Title = 'Mr'", conn); 
     SqlCommandBuilder builder = new SqlCommandBuilder(dataAdapter); 
     dataAdapter = new SqlDataAdapter(db); 
     dataset = new DataSet(); 
     dataAdapter.Fill(dataset, "TblEmp"); 
     dataGridView1.DataSource = dataset.Tables["TblEmp"]; 

这里是通过记录无二nextButoon代码

void NextRecord() 
{ 
    if (RecordCounter; dataset.Tables[0].Rows.Count -1) 
    { 
     RecordCounter++; 
     TxtDisplayQuestion.Text = dataset.Tables[0].Rows[ RecordCounter][Emp_Title].ToString(); 
    } 
} 

谢谢

回答

0

这将做到这一点。为避免选择同一行两次,该方法会记住最后一个选定行,并在第二次选择同一行时尝试查找新的随机行。

private Random rnd = new Random(); 
private int lastSelectedIndex = -1; 

void RandomRecord() 
{ 
    int noRows = dataset.Tables[0].Rows.Count; 
    int index = rnd.Next(noRows); 

    while(index == lastSelectedIndex && noRows > 1) { 
     index = rnd.Next(noRows); 
    } 

    lastSelectedIndex = index; 

    TxtDisplayQuestion.Text = dataset.Tables[0].Rows[index][Emp_Title].ToString(); 
} 
+0

嗯,出于某种原因,有时一个记录被选中两次上面的代码。 – user3434135

+0

@ user3434135请看我更新的答案 – Johan

0

我会认为这是WinForms由于命名,但纠正我,如果我米错了。

你可以在表单的顶部定义Random类的新实例:

var r = new Random(Environment.TickCount); 

然后从电网利用访问随机行:

var randomGridRow = dataGridView.Rows[r.Next(0, dataGridView.RowCount)]; 

还是从DataTable本身:

var randomTableRow = dt.Rows[r.Next(0, dt.Rows.Count)]; 
0

这个怎么样?

void NextRecord() 
{ 
    var rnd = new Random(DateTime.Now.Millisecond); 
    var randomNumber = rnd.Next(dataset.Tables[0].Rows.Count - 1); 
    TxtDisplayQuestion.Text = dataset.Tables[0].Rows[randomNumber][Emp_Title].ToString(); 
} 
+0

谢谢..有没有一种方法可以避免选择相同的记录两次? – user3434135

+0

将记录添加到查看记录的列表中,或者可以将记录添加到记录所组成的类中。 –