仅当在组合框中列出时,才将DateTime字符串转换为日期
本文关键字:DateTime 才将 字符串 转换 日期 组合 | 更新日期: 2023-09-27 18:28:04
我有一个dataGridView_flaggedComments
,其中有一个名为Comments_Date
的列(格式为31/12/2014 01:10:11 PM
),我将日期部分添加到comboBox_stockDates
,如果有几个相同的日期,例如31/12/2014
,我只希望它在comboBox_stockDates
中出现一次,而不是重复。
这是我的代码,它会列出所有日期&每一行的时间,但不能只抓住日期部分。有人能指出我应该更正代码的哪一部分吗?如果有指导的话那就太好了。如果我忽略了任何类似的问题,我深表歉意。非常感谢!
private void PopulateStockDatesIndex()
{
comboBox_stockDates.Items.Clear();
comboBox_stockDates.Items.Add("Choose to Filter");
comboBox_stockDates.FormatString = "dd-MM-yyyy";
DataView dataview_filterDate = (DataView)(dataGridView_flaggedComments.DataSource);
foreach (DataRowView rowView in dataview_filterDate)
{
DataRow row = rowView.Row;
for (int i = 0; i < dataGridView_flaggedComments.Rows.Count - 1; i++)
{
if (dataGridView_flaggedComments.Rows[i].Cells["Comments_Date"].Value.ToString() != "")
{
if (!comboBox_stockDates.Items.Contains(row[1].ToString()))
{
comboBox_stockDates.Items.Add(row[1].ToString());
}
comboBox_stockDates.SelectedIndex = 0;
}
}
}
}
第二版本:
private void PopulateStockDatesIndex()
{
comboBox_stockDates.Items.Clear();
comboBox_stockDates.Items.Add("Choose to Filter");
comboBox_stockDates.FormatString = "dd-MM-yyyy";
foreach (DataGridViewRow row in dataGridView_flaggedComments.Rows)
{
for (int i = 0; i < dataGridView_flaggedComments.Rows.Count - 1; i++)
{
if (dataGridView_flaggedComments.Rows[i].Cells["Comments_Date"].Value.ToString() != "")
{
string date = row.Field<DateTime>(1).ToString("dd-MM-yyyy");
if (!comboBox_stockDates.Items.Contains(date))
{
comboBox_stockDates.Items.Add(date);
}
comboBox_stockDates.SelectedIndex = 0;
}
}
}
}
DateTime.ToString
返回包含时间部分的DateTime
的字符串表示。如果只需要日期部分,则可以使用dt.ToString("d")
、dt.ToShortDateString
或dt.ToString("dd-MM-yyyy")
。
string date = row.Field<DateTime>(1).ToString("dd-MM-yyyy");
if (!comboBox_stockDates.Items.Contains(date))
{
comboBox_stockDates.Items.Add(date);
}
您也可以使用LINQ
,如果需要,它还可以对日期进行排序:
string[] distinctDates = dataview_filterDate.Table.AsEnumerable()
.Select(row => row.Field<DateTime>(1).Date) // Date is used to get Distinct dates by day
.Distinct()
.OrderBy(dt => dt)
.Select(dt => dt.ToString("dd-MM-yyyy"))
.ToArray();
comboBox_stockDates.Items.AddRange(distinctDates);
这对我很有效:在新列表中只选择DateTime列表中的Date元素,并创建Dates属性。
public List<DateTime> Dates => dataGridView_flaggedComments.Rows.Select(el => el.Field<DateTime>(1).Date).Distinct().ToList();
在.xaml文件中将您的组合框绑定到Dates属性。
<ComboBox Name="DateSelection" ItemsSource="{Binding Dates}"/>