2017-10-03 1 views
0

DataGridview 셀에서 내 엔터티 프레임 워크의 개체 목록을 나타내려고합니다.DataGridview에서 셀에 바인딩 할 개체 목록

표시하려면 셀 서식 지정 이벤트를 재정의하고 셀의 값을 쉼표로 구분 된 개체 ID 목록으로 설정하십시오.

이제 사용자가 해당 셀을 편집하려면 입력으로 무엇인가해야합니다.

내가 생각했던 것은 셀 패싱을 재정의하고 데이터 구조에 올바른 개체를 설정하고 셀을 표시하는 것이 었습니다. 그러나 컨트롤이 던져 캐스팅 예외없이 해당 내용을 설정할 위치를 볼 수 없기 때문에 셀을 그냥 비어 있습니다. 포맷 이벤트를 다시 호출 할 수 있습니까?

이 접근법을 잊어 버리고 코드에서이 모든 것을 데이터 격자에 바인딩 할 수있는 뷰를 출력하는 다른 레이어가 있어야하나요?

고마워요.

private void dataGridView1_CellParsing(object sender, DataGridViewCellParsingEventArgs e) 
    { 
     if (dataGridView1.Columns[e.ColumnIndex].Name == "Categories") 
     { 
      String catids = dataGridView1.CurrentCell.Value.ToString(); 

      Product p = (Product)productBS.Current; 

      //DataRow dataRow = ((DataRowView)bindingSource1.Current).Row; 

      p.Categories.Clear(); 

      String[] catstrings = catids.Split(','); 

      foreach (var cs in catstrings) 
      { 
       int catid = 0; 

       int.TryParse(cs, out catid); 

       if (catid != 0) 
       { 
        // Find this cat list in the BS and change it 
        p.Categories.Add(_db.Categories.Find(catid)); 
       } 
      } 

      e.Value = p.Categories; 

      e.ParsingApplied = true; 


     } 


    } 
+0

https://msdn.microsoft.com/en-us/library/system.windows.forms.datagridviewcell(v=vs.110).aspx. 이것은 도움이 될 것입니다 – Ramankingdom

답변

0

(1) 값 비싼 셀 서식 이벤트에는 사용하지 마십시오. 먼저 데이터 서식을 지정하고 표시하십시오.

(2) 이제 사용자가 편집을 원하고 데이터를 포맷하려고합니다. 그럼 난 바인딩하기 전에 나는 간단한 속성보기와 같은 다른 객체를 생성해야합니다 데이터를 포맷하면

private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e) 
    { 
     // here check for formatting. 
    } 
+0

내 엔티티에서 새로운 클래스를 만들어야한다고 생각합니다. 이러한 클래스는이 이벤트 처리없이 DataGridview에 쉽게 바인딩 할 수있는 간단한 속성 만 갖습니다. 다른 객체 레이어가 필요하지 않지만 다른 방법으로는 볼 수 없습니다. – indigo

0

편집을 추적하기 위해 벨로 이벤트를 사용, 그래서 내 모든 복잡한 엔티티 객체의 다른 레이어의 그 내가 보여줄 것이다. 나는 그것들에 단순한 linq 표현식을 사용할 수 없다. 왜냐하면 그것들은 무언가 다른 객체들을 사용하기 때문이다.

이제 편집 된 데이터를 처리하기 위해 endEdit에 무엇을 넣을 지 모르겠습니다. 셀에서 문자열을 가져올 수없고 개체로 다시 변환 할 수 없으며 여전히 파이프 라인의 pushValue 부분에 잘못된 캐스트 예외가 발생합니다. 문자열을 객체로 다시 변환하려면?

관련 문제