10-08-2010, 22:49
|
|
|
חבר מתאריך: 07.10.06
הודעות: 1,795
|
|
אני לא חושב שתוכל לעשות מיון מובנה.
מה שאני הייתי עושה, זה הייתי שומר ב-TAG של ה-ROW את הערך הקטן ביותר בעל השוואה. (למשל לתרגם הכל לדקות).
הנה דוגמא שמבצעת את זה:
קוד:
private void Form1_Load(object sender, EventArgs e)
{
this.dataGridView1.Columns.Add("1", "1");
this.dataGridView1.Columns.Add("2", "2");
this.dataGridView1.Columns.Add("3", "3");
this.dataGridView1.Columns.Add("Tag", "Tag");
this.dataGridView1.Rows.Add(new string[]{"a","1","c"});
this.dataGridView1.Rows.Add(new string[]{"b","2","c"});
this.dataGridView1.Rows.Add(new string[]{"c","3","c"});
this.dataGridView1.Rows.Add(new string[]{"d","4","c"});
this.dataGridView1.Rows[0].Tag = "0";
this.dataGridView1.Rows[1].Tag = "7";
this.dataGridView1.Rows[2].Tag = "2";
this.dataGridView1.Rows[3].Tag = "3";
for (int X = 0; X < this.dataGridView1.Columns.Count; X++)
{
this.dataGridView1.Rows[X].Cells[3].Value = this.dataGridView1.Rows[X].Tag;
}
this.dataGridView1.Sort(new RowComparer());
}
private class RowComparer : System.Collections.IComparer
{
public int Compare(object x, object y)
{
DataGridViewRow DataGridViewRow1 = (DataGridViewRow)x;
DataGridViewRow DataGridViewRow2 = (DataGridViewRow)y;
return int.Parse(DataGridViewRow1.Tag.ToString()) - int.Parse(DataGridViewRow2.Tag.ToString());
}
}
הערה: כמובן שאתה לא חייב לשמור את הערך ב-TAG, כפי שהצעתי. אתה יכול לממש את ההשוואה בדרך אחרת. למשל פונקציה שתתרגם ש-hours 1 = 60min וכו....
|