2016-08-22 5 views
0

나는 두 개의 dateTimePicker를 가지고 있으며 처음에는 날짜를 선택하고 두 번째 것은 날짜보다 첫 번째 날짜를 선택하는 가능성을 자동으로 차단합니다. 다음과 같이 나는 코드를 사용하지만 날짜는 내가 일을 보여주고 싶은 DateTimePicker에서 일부 날짜를 사용하지 않도록 설정하는 방법

private void dateTimePicker1_ValueChanged(object sender, EventArgs e) 
{ 
    //TODO SOMETHING (handle errors etc...) 
    //...   

    dateTimePicker2.MinDate = dateTimePicker1.Value; 
} 

를 표시하지 않습니다 만, 선택할 수 없습니다 사용할 수 없습니다? 이럴 수있어? 부디!

enter image description here

내 코드는 다음과 같습니다 : 다음과 같이 Source code

using System; 
using System.Collections.Generic; 
using System.Windows.Forms; 
using System.Linq; 

namespace formStudent 
{ 
    public partial class formStudent : Form 
    { 
     List<Student> listStudent = new List<Student>(); 
     class Student 
     { 
      public string name { get; set; } 
      public string gender { get; set; } 
      public string birthday { get; set; } 

      public Student(string inName, string inGender, string inBirthday) 
      { 
       name = inName; 
       gender = inGender; 
       birthday = inBirthday; 
      } 
     } 
     public formStudent() 
     { 
      InitializeComponent(); 

      string[,] arrData = new string[10, 3] { 
            { "Jane","Female","2016/08/11" }, 
            { "Peter","Female","2016/08/12" }, 
            { "John","Female","2016/08/13" }, 
            { "Ronaldo","Male","2016/08/14" }, 
            { "Jerry","Female","2016/08/15" }, 
            { "David","Female","2016/08/16" }, 
            { "Rooney","Male","2016/08/17" }, 
            { "Ozil","Male","2016/08/18" }, 
            { "Torres","Male","2016/08/19" }, 
            { "Messi","Male","2016/08/20" }, 
           }; 

      //Data row 
      List<string> dataRow = new List<string>(); 

      //Data Student 
      Student student = null; 

      for (int row = 0; row < 10; row++) 
      { 
       for (int col = 0; col < 3; col++) 
       { 
        dataRow.Add(arrData[row, col]); 
       } 

       student = new Student(dataRow[0], dataRow[1], dataRow[2]); 
       //Get data student 
       listStudent.Add(student); 

       dataRow = new List<string>(); 
      } 
     } 

     // Filter 1 
     private void dateTimePicker1_ValueChanged(object sender, EventArgs e) 
     { 
      this.dataGridView.Rows.Clear(); 

      var filteredData = listStudent.Where(st => ((dateTimePicker1.Value <= DateTime.Parse(st.birthday).AddDays(1)) && (dateTimePicker2.Value >= DateTime.Parse(st.birthday)))); 
      List<Student> listData = new List<Student>(filteredData); 
      displayData(listData); 

      /** 
      * dateTimePicker2.MinDate = dateTimePicker1.Value; 
      */ 

     } 

     // Filter 2 
     private void dateTimePicker2_ValueChanged(object sender, EventArgs e) 
     { 
      this.dataGridView.Rows.Clear(); 

      var filteredData = listStudent.Where(st => ((dateTimePicker1.Value <= DateTime.Parse(st.birthday).AddDays(1)) && (dateTimePicker2.Value >= DateTime.Parse(st.birthday)))); 
      List<Student> listData = new List<Student>(filteredData); 
      displayData(listData); 

      if (dateTimePicker2.Value < dateTimePicker1.Value.Date) 
      { 
       dateTimePicker2.Value = dateTimePicker1.Value.Date; 
      } 
     } 

     private void dateTimePicker2_Enter(object sender, EventArgs e) 
     { 
      // temporarily set to an earlier date 
      dateTimePicker1.MinDate = new DateTime(1900, 1, 1); 
     } 

     private void dateTimePicker2_Leave(object sender, EventArgs e) 
     { 
      dateTimePicker2.MinDate = dateTimePicker1.Value.Date; 
     } 

     private void formStudent_Load(object sender, EventArgs e) 
     { 
      //Show data 
      displayData(listStudent); 
     } 

     private void displayData(List<Student> listData) 
     { 
      //Show data 
      foreach (Student item in listData) 
      { 
       int ii = this.dataGridView.Rows.Add(); 
       this.dataGridView.Rows[ii].Cells[0].Value = item.name; 
       //Gender 
       string strGender = string.Empty; 
       if ("Male".Equals(item.gender)) 
        strGender = "Male"; 
       else 
        strGender = "Female"; 
       this.dataGridView.Rows[ii].Cells[1].Value = strGender; 
       this.dataGridView.Rows[ii].Cells[2].Value = item.birthday; 

      } 
     } 
    } 
} 
+0

표시하는 내용은 의도적으로 설계 한 것입니다. MinDate를 설정 했으므로 이전 날짜가 표시되지 않습니다. –

+0

나는 하루를 보여주고 싶지만 선택할 수없는 장애인인가? 이럴 수있어? – MinhKiyo

+0

"월요일, 화요일, 수요일 등"의 의미입니까? –

답변

1

내가이 일을 알고있는 유일한 방법은 다음과 같습니다

private void dateTimePicker2_Enter(object sender, EventArgs e) 
    { 
     // temporarily set to an earlier date 
     dateTimePicker1.MinDate = new DateTime(1900, 1, 1);   
    } 

    private void dateTimePicker2_Leave(object sender, EventArgs e) 
    { 
     dateTimePicker2.MinDate = dateTimePicker1.Value.Date; 
    } 

    private void dateTimePicker2_ValueChanged(object sender, EventArgs e) 
    { 
     if (dateTimePicker2.Value < dateTimePicker1.Value.Date) 
     { 
      dateTimePicker2.Value = dateTimePicker1.Value.Date; 
     } 
    } 

그런 다음이, 이전을 할 경우 날짜는 회색으로 표시되지 않지만 (비활성화 됨) 이전 날짜를 클릭하면 날짜가 최소값으로 설정됩니다.

+0

해답을 가져 주셔서 감사합니다. 첫 번째 수술이라면 당신이 말한 것과 같습니다. 하지만 두 번째 작업에서는 위에서 설명한 것처럼 날짜가 표시되지 않습니다. [소스 코드 첨부] (http://www.mediafire.com/download/2bxupy1xioqmlm9/formStudent6.zip). 확인 해주세요! – MinhKiyo

+0

스택 오버플로 표준을 준수하려면 질문을 편집하여 질문에 코드를 붙여 넣으십시오. 그런 식으로 모든 사람들이 그것을보고 배울 수 있습니다. –

+0

좋아, 내 질문을 편집했습니다. 상기시켜 주셔서 감사합니다! – MinhKiyo

관련 문제