[英]Get timespan of every row in datagridview in C#
所以我做了一個小議程,我將待辦事項列表插入到數據庫中,並在保存時將其與DateTime.Now
一起填充到DataGridView
。 如果我忘記對該列表執行某些操作,它將顯示通知並告訴我忘記這樣做。
我想使用最多幾小時的TimeSpan
,只有通過2小時才會顯示通知。
這是我目前的代碼:
private void GetSpan()
{
foreach (DataGridViewRow row in dataGridView1.Rows)
{
TimeSpan span = (DateTime.Now - Convert.ToDateTime(row.Cells[2].Value));
String.Format("{0} hours, {1} minutes, {2} seconds",
span.Hours, span.Minutes, span.Seconds);
}
}
這段代碼的問題在於它只給出了一個結果,而不是DataGridView
每一行都給出了所有結果。 那么如何將其轉換為數組並獲得每個結果呢?
首先,您需要為System.Linq添加使用:
using System.Linq;
然后你可以使用這個小片段:
IEnumerable<TimeSpan> timeSpans = dataGridView1.Rows.Select(row => (DateTime.Now - Convert.ToDateTime(row.Cells[2].Value));
您可以在foreach -loop中使用IEnumerable或將其轉換為Array ( timespans.ToArray()
)或List ( timespans.ToList()
)。
您的方法可能如下所示:
private IEnumerable<TimeSpan> GetSpans()
=> dataGridView1.Rows.Select(row => (DateTime.Now - Convert.ToDateTime(row.Cells[2].Value));
或者像這樣:
private IEnumerable<TimeSpan> GetSpans()
{
dataGridView1.Rows.Select(row => (DateTime.Now - Convert.ToDateTime(row.Cells[2].Value));
}
你可以像這樣使用它:
foreach (TimeSpan span in this.GetSpans())
{
string formattedTimeSpan = String.Format("{0} hours, {1} minutes, {2} seconds",
span.Hours, span.Minutes, span.Seconds);
doSomething(formattedTimeSpan);
}
當你正在尋找使用數組的正確軌道時, List
將完成同樣的事情並且更容易使用。
private List<String> GetSpans()
{
var timeSpanList = new List<string>();
foreach (DataGridViewRow row in dataGridView1.Rows)
{
TimeSpan span = (DateTime.Now - Convert.ToDateTime(row.Cells[2].Value));
timeSpanList.Add(String.Format("{0} hours, {1} minutes, {2} seconds",
span.Hours, span.Minutes, span.Seconds));
}
return timeSpanList;
}
這將為您提供一個TimeSpans的完整列表,一個用於數據網格中的每一行。 根據您的應用程序,您可能希望返回List<TimeSpan>
而不是格式化的字符串列表,但這取決於您。
或者,另一個可能對你有幫助的有用集合類型是Dictionary
。 如果每行都有唯一的ID,則可以將此函數的結果存儲在Dictionary而不是List中; 這會讓你快速查看任何給定行的TimeSpan稍后的行ID。
FMI:
我建議創建一個包含所有時間跨度的列表,這樣您就可以迭代或選擇(使用linq)您希望擁有的所有項目。
// Make returnvalue list of timespans
private List<TimeSpan> GetSpan()
{
List<TimeSpan> allSpans = new List<TimeSpan>();
foreach (DataGridViewRow row in dataGridView1.Rows)
{
TimeSpan span = (DateTime.Now - Convert.ToDateTime(row.Cells[2].Value));
String.Format("{0} hours, {1} minutes, {2} seconds",
span.Hours, span.Minutes, span.Seconds);
// Add timespans to list
allSpans.Add(span);
}
// return list
return allSpans;
}
現在,您可以通過調用遍歷另一個函數中的列表
private void Form1_Load(object sender, EventArgs e)
{
foreach(var time in GetSpan())
{
// doSomething with time
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.