2014-03-24 163 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

將記錄添加到查看記錄的列表中,或者可以將記錄添加到記錄所組成的類中。 –