2014-10-28 5 views
1

Comments_Date (31/12/2014 01:10:11 PM의 형식으로되어 있음)이라는 열이있는 dataGridView_flaggedComments이 있고, 동일한 날짜가있는 경우 날짜 부분을 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; 
      } 
     } 
    } 
} 

2 버전 :

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; 
      } 
     } 
    } 
} 

답변

6

DateTime.ToString는 시간 부분을 포함 DateTime의 스트링 표현을 반환한다. 날짜 부분 만 원할 경우 dt.ToString("d"), dt.ToShortDateString 또는 dt.ToString("dd-MM-yyyy")을 사용할 수 있습니다. ,

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); 
+0

안녕하세요 팀이 지적 주셔서 대단히 감사합니다 :

string date = row.Field<DateTime>(1).ToString("dd-MM-yyyy"); if (!comboBox_stockDates.Items.Contains(date)) { comboBox_stockDates.Items.Add(date); } 

당신은 또한 또한 원하는 경우 날짜를 정렬 LINQ를 사용할 수 있습니다. 나는 새로운 것을 배웠다! :)) 그것은 작동합니다. 고맙습니다! :) – Shyuan

+1

@Shyuan : 다른 접근법을 보여주기 위해 내 대답을 편집했음을 유의하십시오. 'using System.Linq'을 추가해야합니다 (LINQ에 익숙하지 않은 경우). –

+0

알겠습니다. 'if' 문보다는 LINQ를하는 것이 좋겠습니까? 저는 LINQ에 대해 여러 번 들었습니다. LINQ가 장점을 가지고있는 것처럼 보이지만, 프로그래밍에 상당히 초보자이기 때문에 익숙하지 않습니다. – Shyuan

관련 문제