スタックオーバーフローWebサイトを掃除して、この問題を解決しようとしている私の頭を叩いていましたが、WindowsフォームDataGridView C#:タグ名と値の名前でデータを並べ替え
基本的には、私はDataGridView
を値の名前で列0を並べ替えるために、またタグ名で並べ替えるためにWindowsフォームに持っています。私は私の問題を示すのに役立つ簡単なコードを作成しました。
私はソートがトリガーされた値
public Form1()
{
InitializeComponent();
dataGridView1.Rows.Add(11);
//column 1
dataGridView1.Rows[0].Cells[0].Value = "0 - TITLE";
dataGridView1.Rows[1].Cells[0].Value = "1";
dataGridView1.Rows[2].Cells[0].Value = "2";
dataGridView1.Rows[3].Cells[0].Value = "3";
dataGridView1.Rows[4].Cells[0].Value = "4";
dataGridView1.Rows[5].Cells[0].Value = "5";
dataGridView1.Rows[6].Cells[0].Value = "6";
dataGridView1.Rows[7].Cells[0].Value = "7";
dataGridView1.Rows[8].Cells[0].Value = "8";
dataGridView1.Rows[9].Cells[0].Value = "9";
dataGridView1.Rows[10].Cells[0].Value = "10";
dataGridView1.Rows[0].Cells[0].Tag = "TITLE";
dataGridView1.Rows[1].Cells[0].Tag = "PASS";
dataGridView1.Rows[2].Cells[0].Tag = "PASS";
dataGridView1.Rows[3].Cells[0].Tag = "FAIL";
dataGridView1.Rows[4].Cells[0].Tag = "PASS";
dataGridView1.Rows[5].Cells[0].Tag = "PASS";
dataGridView1.Rows[6].Cells[0].Tag = "PASS";
dataGridView1.Rows[7].Cells[0].Tag = "PASS";
dataGridView1.Rows[8].Cells[0].Tag = "FAIL";
dataGridView1.Rows[9].Cells[0].Tag = "PASS";
dataGridView1.Rows[10].Cells[0].Tag = "PASS";
//column 2
dataGridView1.Rows[0].Cells[1].Value = "A - TITLE";
dataGridView1.Rows[1].Cells[1].Value = "B - THIS IS";
dataGridView1.Rows[2].Cells[1].Value = "C - A";
dataGridView1.Rows[3].Cells[1].Value = "D - TEST";
dataGridView1.Rows[4].Cells[1].Value = "E - THAT";
dataGridView1.Rows[5].Cells[1].Value = "F - I";
dataGridView1.Rows[6].Cells[1].Value = "G - AM";
dataGridView1.Rows[7].Cells[1].Value = "H - RUNNING";
dataGridView1.Rows[8].Cells[1].Value = "I - RIGHT";
dataGridView1.Rows[9].Cells[1].Value = "J - NOW";
dataGridView1.Rows[10].Cells[1].Value = "K - !";
//column 3
dataGridView1.Rows[0].Cells[2].Value = "0 - TITLE";
dataGridView1.Rows[1].Cells[2].Value = "14.999999999999";
dataGridView1.Rows[2].Cells[2].Value = "15.0001";
dataGridView1.Rows[3].Cells[2].Value = "15.00";
dataGridView1.Rows[4].Cells[2].Value = "15.0";
dataGridView1.Rows[5].Cells[2].Value = "15";
dataGridView1.Rows[6].Cells[2].Value = "11.99";
dataGridView1.Rows[7].Cells[2].Value = "12.01";
dataGridView1.Rows[8].Cells[2].Value = "12";
dataGridView1.Rows[9].Cells[2].Value = "88.65";
dataGridView1.Rows[10].Cells[2].Value = "33.25";
}
第二部は、ボタンクリックトリガイベントである、とのDataGridViewを移入私の形での最初の部分。
private void button1_Click(object sender, EventArgs e)
{
DataGridViewColumn newColumn = dataGridView1.Columns[0];
DataGridViewColumn oldColumn = dataGridView1.SortedColumn;
ListSortDirection direction;
// If oldColumn is null, then the DataGridView is not sorted.
if (oldColumn != null)
{
// Sort the same column again, reversing the SortOrder.
if (oldColumn == newColumn &&
dataGridView1.SortOrder == SortOrder.Ascending)
{
direction = ListSortDirection.Descending;
}
else
{
// Sort a new column and remove the old SortGlyph.
direction = ListSortDirection.Ascending;
oldColumn.HeaderCell.SortGlyphDirection = SortOrder.None;
}
}
else
{
direction = ListSortDirection.Ascending;
}
// Sort the selected column.
dataGridView1.Sort(newColumn, direction);
newColumn.HeaderCell.SortGlyphDirection =
direction == ListSortDirection.Ascending ?
SortOrder.Ascending : SortOrder.Descending;
}
ので、このコードは、値の名前(両方昇順と降順)で、列0を並べ替えることができますが、私はもう一度ボタンをクリックしたときに、私はタグ名でソートできるようにしたい、と特定の順序で、最初にタイトルを意味し、その後に失敗し、続いてパスを意味する。
誰かがアイディアを持っている場合は、私に知らせてください。ありがとう。
あなたのデータソース、例えば 'DataTable'やデータが含まれている'一覧 'を並べ替えることができます。 –
彼は1つ持っていないように見えます。 2番目と3番目の答え[ここ](http://stackoverflow.com/questions/435177/c-custom-sort-of-datagridview)は、DGVのカスタムソートの作成についてです。しかし、データソースを作成して使用する方が簡単かもしれませんが、カスタムの方が柔軟性があります。 – TaW