I have a datagridview with values that I add manualy with a datasource, however I want to add a button where the user can shuffle the order of where the values are located in the datagridview. Does anyone have an idead on how to apply this?
Asked
Active
Viewed 306 times
0
-
1Read [this answer](https://stackoverflow.com/a/1287572/8380785) – D. Dahlberg Apr 28 '20 at 10:37
-
added an answer – Gabriel Llorico Apr 28 '20 at 10:41
2 Answers
0
if it comes from sql statement with
SELECT * FROM table
ORDER BY NEWID()
but if it is a different form of datasource
var data = //un randomed data
var randomData = data.OrderBy(x => Guid.NewGuid()).ToList();
//then bind randomData to your datasource
so on button click, update it by
getData(){
//use either sql statement or OrderBy() then bind
}

Rand Random
- 7,300
- 10
- 40
- 88

Gabriel Llorico
- 1,783
- 1
- 13
- 23
0
Add a hidden column that contains a random number and sort the rows using that.
If you set AutoGenerateColumns
to false
you can specify the order of the columns.
void ShuffleDataGridView(DataGridView dataGridView, DataTable dataTable)
{
// add or update random sort order column
const string randomSortConst = "RandomSort";
if (!dataTable.Columns.Contains(randomSortConst))
{
dataTable.Columns.Add(randomSortConst, typeof(int));
}
var rand = new Random();
foreach (DataRow drw in dataTable.Rows)
{
drw[randomSortConst] = rand.Next();
}
// randomize column display
dataGridView.AutoGenerateColumns = false;
dataGridView.AllowUserToOrderColumns = false;
dataGridView.Columns.Clear();
var columnsToAdd = new List<DataColumn>();
foreach (DataColumn dcl in dataTable.Columns)
{
if (!(dcl.ColumnName == randomSortConst))
{
columnsToAdd.Add(dcl);
}
}
while (columnsToAdd.Count > 0)
{
var j = rand.Next(0, columnsToAdd.Count - 1);
var dgvtbc = new DataGridViewTextBoxColumn
{
DataPropertyName = columnsToAdd[j].ColumnName,
HeaderText = columnsToAdd[j].ColumnName // remove this line to hide column headings
};
dataGridView.Columns.Add(dgvtbc);
columnsToAdd.RemoveAt(j);
}
// sort the rows using the hidden random column
dataGridView.DataSource = new DataView(dataTable, string.Empty, randomSortConst, DataViewRowState.CurrentRows);
}

SSS
- 4,807
- 1
- 23
- 44