2012-09-15 7 views
1

데이터 그리드의 단추를 보여주는 인터페이스를 디자인하고 싶습니다. 매일 및 24 시간 동안. 24 * 7 = 168 개의 버튼이 모두 표시됩니다.2 차원 데이터 격자를 표시하는 방법

어떤 방법을 생각 하나?

+0

(DGVButtons의) 24 개의 열을 만든 다음 7 개의 행을 추가하거나 그 반대입니다. –

답변

1

나는 어떻게 완료했는지에 대한 예제 코드를 만들었습니다. 이 코드는 단추 만 생성하므로 체크 아웃하십시오. 참고 : 이름 단추는 자신 만의 방식으로, 나는 예제를 수행했습니다!

 dataGridView1.AllowUserToAddRows = false; 
     for (int i = 0; i < 24; i++) 
     { 
      DataGridViewButtonColumn btnColumn = new DataGridViewButtonColumn(); 
      btnColumn.HeaderText = string.Format("{0}:00", i+1); 
      btnColumn.Name = "dayColumn"; 
      btnColumn.Width = 40; //set yout width 
      dataGridView1.Columns.Add(btnColumn); 
     } 
     for (int i = 0; i < 7; i++) 
     { 
      dataGridView1.Rows.Add(); 
      dataGridView1.Rows[i].HeaderCell.Value = (i + 1).ToString(); 
      for (int j = 0; j < dataGridView1.Columns.Count; j++) 
      { 
       dataGridView1[j, i].Value = string.Format("{0}:00", (j + 1)); 
      } 
     } 

-

어쩌면 클릭 몇 가지 버튼 좋은 생각 인 이벤트 핸들러에 가입 :

public Form1() 
    { 
     InitializeComponent(); 
     dataGridView1.AllowUserToAddRows = false; 
     for (int i = 0; i < 24; i++) 
     { 
      DataGridViewButtonColumn btnColumn = new DataGridViewButtonColumn(); 
      btnColumn.HeaderText = string.Format("{0}:00", i+1); 
      btnColumn.Name = "dayColumn"; 
      btnColumn.Width = 40; //set yout width 
      dataGridView1.Columns.Add(btnColumn); 
     } 
     for (int i = 0; i < 7; i++) 
     { 
      dataGridView1.Rows.Add(); 
      dataGridView1.Rows[i].HeaderCell.Value = (i + 1).ToString(); 
      for (int j = 0; j < dataGridView1.Columns.Count; j++) 
       dataGridView1[j, i].Value = string.Format("{0}:00", (j + 1)); 
     } 
     dataGridView1.CellClick += new DataGridViewCellEventHandler(dataGridView1_CellClick); 
    } 

    private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e) 
    { 
     string day = dataGridView1.Rows[e.RowIndex].HeaderCell.Value.ToString(); 
     string hour = dataGridView1.Columns[e.ColumnIndex].HeaderText.ToString(); 
     MessageBox.Show("you have clciked on day: " + day + ", hour: " + hour); 
    } 
+0

답변 해 주셔서 감사합니다. – user1606328

1

직접 지정할 수 있습니다 ITypedList라는 프레임 워크의 인터페이스가있다 데이터 바인딩이 이해하는 방식으로 각 구성 멤버에 대해 표시 할 속성

이런 식으로 바인딩을 시도하는 것이 절대적으로 끔찍한임을 깨달으십시오. 기본 단계는 다음과 같습니다.

  • ITypedList을 구현하는 컬렉션 유형을 구현하십시오.
  • 컬렉션의 각 항목에 대해 행/열 쌍의 값을 캡슐화하는 PropertyDescriptor을 반환합니다. 정상

로 컬렉션에

  • 데이터 바인딩 나는 실험으로 이런 짓을했는데 그것은 작동하지만, 당신은을 통해 이동해야 농구를 제대로 작동 악몽에 모든 것을 얻을 수 있습니다. 여전히 뷰 로직을 직접 조작하는 것보다 더 좋다고 생각합니다. DataGridView는 바인딩에서 수행해야하는 모든 작업을 추론 할 수있을 정도로 지능적이어야합니다. 컨트롤 대신 바인딩 대상을 수정할 수 있다면 원하는 것입니다.

  • 관련 문제