我有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;
}
}
}
}
答案 0 :(得分:6)
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);
答案 1 :(得分:1)
这对我有用: 从您的DateTime列表中仅选择Date元素进入新列表,然后创建一个Dates属性。
public List<DateTime> Dates => dataGridView_flaggedComments.Rows.Select(el => el.Field<DateTime>(1).Date).Distinct().ToList();
.xaml文件中的将ComboBox绑定到Dates属性。
<ComboBox Name="DateSelection" ItemsSource="{Binding Dates}"/>