0

Windows Forms 응용 프로그램에서 작업 중이며 데이터베이스에서 찾은 모든 사용자를 나열하는 표보기가 있습니다. 데이터베이스는 다음과 같습니다DataGridView에서 추가 단추를 클릭하여 행 추가

테이블 사용자

테이블 권한 이제

, 모든 사용자는 등 하나의 관리자와 같은 권한, 또는 사용자를 가질 수 있습니다,하지만 난 별도의에서이 정보를 유지 표와 외래 키 제약 조건을 정의하여 최종 사용자가 잘못된 권한을 가진 사용자를 삽입 할 수없고 Privileges 테이블에있는 사용자 만 삽입 할 수 있습니다.

그런데 Entity Framework를 사용하고 있으며 Database First 메서드를 사용하여 Model 개체를 만들었습니다. 하지만 이것은 아마도 질문/답변에 영향을 미치지 않을 것입니다. 왜냐하면 제가 물어 보려는 것의 논리는 데이터베이스의 데이터를 어떻게 조작하든 관계없이 동일 할 것이기 때문입니다.

그래서 지금은 두 개의 바인딩 소스가 있습니다. 하나는 userBidningSource이고 다른 하나는 privilegesBindingSource입니다. 사용자 모델에는 권한에 대한 탐색 속성이 있고 그 반대의 경우도 있습니다 (EF가 생성 함). 지금은 이런 식으로 내 양식에 데이터 소스 메뉴에서 사용자 데이터 소스를 드래그하고, (내 양식 부하에서) 일부 코드를 작성했습니다 :

try{ 
    context.user.Load(); 
    this.userBindingSource.DataSource = context.user.Local.ToBindingList(); 

}catch(Exception ex){ 
    Debug.Write(ex); 
} 

지금이 작품 (아마 모든 코드를 추가 잊었지만 지금까지 모든 것이 작동 함) 사용자 테이블의 모든 열을 가진 모든 사용자의 목록을 얻었습니다.

안전하지 않아 최종 사용자에게 어떤 privilege_id 필드를 입력해야 할지를 추측하거나 추측 할 수 없으므로 필자는 해당 열의 표보기에서 콤보 박스를 만들었습니다. 권한 데이터 소스에 (오른쪽 그리드보기를 클릭 한 다음 열 편집) 디자이너에서이 칼럼의

context.privileges.Load(); 
     this.privilegesBindingSource.DataSource = context.user.Local.ToBindingList(); 

또한 내가 설정 한 데이터 소스 :

그래서 난 내 코드에서 이런 일을 추가했다.

이제 모든 드롭 다운이 채워집니다.

문제점

마지막으로, 문제 ... 바로 지금, 내가 새 행을 추가하려합니다. 내가 그리드 뷰의 + 아이콘을 클릭하면 그래서, 난라는 오류 얻을 : ". DataGridViewComboBoxCell 값이 유효하지 않습니다 이 대화창 DataError 이벤트를 처리하시기 바랍니다이 기본값을 바꾸려면."

문제는 현재 설정으로 행을 추가하는 방법입니다. 내가 뭘 잘못하고 있니?

답변

1

시도가 이벤트 DataError을 부가 DataGridView에 속성으로 이동하여 빈/빈 함수 본문을 둡니다.

+0

이제 해결되었습니다. 설명해 주시겠습니까? – Whirlwind

+0

https://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.dataerror(v=vs.110).aspx. 이 문서를 참조하십시오. 도움이 될지 모르겠다. –

1

DisplayMemberValueMember 속성을 설정해야 새 행이 추가 될 때 해당 정보가 사용되어 콤보 상자가 채워집니다. 메소드를 추가하여 새 행이 요청 될 때 핸들러를 호출하여 새 행의 기본값을 지정하도록 지정할 수 있습니다.당신은 DefaultValuesNeeded 이벤트에 이벤트 처리기를 추가하고 지정 기본값을 다음과 같이 예를 들어 수

private void dataGridView1_DefaultValuesNeeded(object sender, 
    System.Windows.Forms.DataGridViewRowEventArgs e) 
{ 
    e.Row.Cells["Region"].Value = "WA"; 
    e.Row.Cells["City"].Value = "Redmond"; 
    e.Row.Cells["PostalCode"].Value = "98052-6399"; 
    e.Row.Cells["Country"].Value = "USA"; 
    e.Row.Cells["CustomerID"].Value = NewCustomerId(); 
} 
+0

답변을 보내 주셔서 감사합니다. 나는 내가 컴퓨터에 손을 넣 자마자 오늘 밤 그것을 시도 할 것이다 ... – Whirlwind

+0

방금 ​​확인했다. 사실 DisplayMember (privilege_name) 및 ValueMember set (기본 키인 privilege_id)입니다. 지금 나는 디폴트 값을 원한다면 정말로 모른다. 나는 그것들을 모두 비우길 원한다. 또한 행을 기본값으로 채울 때 동일한 오류가 발생합니다. 내 설치에서 뭔가 분명해 보일거야 ...? – Whirlwind

+0

기본 짝수 처리기에서 콤보 상자의 기본값을 설정하고 문제가 해결되는지 확인하십시오. – CodingYoshi