[英]How to sort a column in datagridview by time
我們能否排序datagridview
列僅時間hh:mm:ss
即使此列單元格中包含時間String
數據類型,我的項目的更多信息,我過濾來自其他一些行datagridview
在當前中顯示datagridview
是我在此談論然后在此列的單元格中包含的問題包含轉換為String
數據類型的TimeSpan
(不是24小時或12小時格式),所以我希望此datagridview
的第一行包含該列或該列中所有現有值的時間跨度較小另一種方式是從00:00:00
到最近的單元格值,如果我們可以用這種方式對列進行排序,或者按照我計划的其他方式不能對其進行排序。
例如:(未排序的列)
Column
00:20:30
00:12:50
00:16:00
(已排序的列)
Column
00:12:50
00:16:00
00:20:30
謝謝
來自您的評論:
“因為我需要將在此datagridview中排序的第一行顯示在文本框中,所以該值在每個時間間隔都在變化 ”
我猜想您想要一個文本框始終顯示DataGridView
特定列的最小值。 我不確定在數據網格視圖中僅查看特定的單元格是否是最佳方法。 似乎是這種情況,您要查詢的列的排序似乎暗示着頂部單元格始終是最短的時間跨度。
我發現,只需單擊列標題即可將時間字符串正確地排序為字符串。 如您所評論,字符串前面可能還有其他文本。 如果是這種情況,那么您將必須清理字符串,否則下面注釋掉的代碼可以滿足您的要求,只需在添加新行或更改現有時間范圍時對該列進行網格排序即可。細胞。
無論在網格中使用的排序如何,此文本框均應工作。 該文本框唯一需要查找的是上述兩個事件之一發生時。 如果網格中添加了一行,或者用戶更改了當前顯示的時間跨度的值,那么我們可能需要更新此文本框中的文本。
這就是下面的代碼。 如果將新行添加到網格,或者用戶更改了時間跨度單元格,則這些事件將更新最低時間跨度文本框。 該代碼只是在網格中循環以確定哪個時間間隔較短。 如果數據很大,則可以使用新添加或更改的時間來簡單地檢查當前的最低時間范圍,這樣會更快。 下面的代碼以應為“ hh:mm:ss”的形式從字符串中獲取最后八個字符,然后從這些字符串中獲取時間跨度並進行比較。 希望這可以幫助。
下面的按鈕單擊事件可切換基於列[0]的datagridview排序
private void button1_Click(object sender, EventArgs e) {
DataGridViewColumn sortCol = dataGridView1.Columns[0];
if (dataGridView1.SortOrder == SortOrder.None) {
dataGridView1.Sort(sortCol, ListSortDirection.Ascending);
} else {
if (dataGridView1.SortOrder == SortOrder.Ascending) {
dataGridView1.Sort(sortCol, ListSortDirection.Descending);
} else {
dataGridView1.Sort(sortCol, ListSortDirection.Ascending);
}
}
}
兩個事件“ CellValueChanged”和“行tbShortestTime
”用於更新TextBox
tbShortestTime
。
private void dataGridView1_CellValueChanged(object sender, DataGridViewCellEventArgs e) {
if (e.ColumnIndex == 0) {
tbShortestTime.Text = GetShortestTime();
//DataGridViewColumn sortCol = dataGridView1.Columns[0];
//dataGridView1.Sort(sortCol, ListSortDirection.Ascending);
}
}
private void dataGridView1_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e) {
tbShortestTime.Text = GetShortestTime();
//DataGridViewColumn sortCol = dataGridView1.Columns[0];
//dataGridView1.Sort(sortCol, ListSortDirection.Ascending);
}
private string GetShortestTime() {
string lowestString = "999:23:59";
for (int i = 0; i < dataGridView1.Rows.Count; i++) {
DataGridViewRow curRow = dataGridView1.Rows[i];
if (!curRow.IsNewRow && curRow.Cells[0].Value != null) {
lowestString = GetLowerTimeString(lowestString, curRow.Cells[0].Value.ToString());
}
}
return lowestString;
}
private string GetLowerTimeString(string inTime1String, string inTime2String) {
if (inTime1String.Length >= 8 && inTime1String.Length >= 8) {
string time1String = inTime1String.Substring(inTime1String.Length - 8, 8);
string time2String = inTime2String.Substring(inTime2String.Length - 8, 8);
TimeSpan t1 = new TimeSpan();
TimeSpan t2 = new TimeSpan();
TimeSpan.TryParse(time1String, out t1);
TimeSpan.TryParse(time2String, out t2);
if (t1 < t2)
return time1String;
if (t1 > t2)
return time2String;
return time1String;
}
else {
if (inTime1String.Length > inTime2String.Length)
return inTime2String;
else
return inTime1String;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.