2016-11-28 1 views
1

SQL 서버에 액세스하고 데이터를 쿼리하는 C# WinForms 프로그램이 있습니다. 두 가지 주요 클래스가 있습니다. Users에는 앱에 로그인 할 수있는 사용자의 데이터 유형이 포함되어 있고 Products에는 쿼리 할 수있는 제품의 데이터 유형이 다시 들어 있습니다. 또한 SQL Server에 액세스하기위한 메서드를 보유한 클래스가 있습니다. 나는 ListView lsv_MangageUsers에로드하는 목록에 사용자가 SQL 데이터베이스를 쿼리하는 기능을 만들었습니다. 새 사용자 추가 및 삭제 방법을 만들 수 있었지만 수정 사용자 방법을 만들 때 문제가 발생했습니다. Visual Studio :C# 'System.Windows.Forms.ListViewItem'형식을 'my app.Users'클래스로 변환 할 수 없습니다.

" 'System.Windows.Forms.ListViewItem'형식을 'my app.Users'클래스 '로 변환 할 수 없습니다.

Users 클래스에서 클래스의 메서드를 수정하고 새로운 폼 컨트롤에로드하여 사용자가 수정할 수 있도록하려고 시도했습니다. 만약 내가 잘못된 방법으로 함수와 메서드를 사용했다면 나는 C#에서 여전히 새로운 것이다. 어떤 도움을 주시면 감사하겠습니다.

수정 사용자 방법을 실행

버튼의 코드 :

private void btn_ModifyUser_Click(object sender, EventArgs e) 
{ 
    if (lsv_ManageUsers.FocusedItem.Index != -1) 
    { 
     UserNew userwindow = new UserNew((Users)lsv_ManageUsers.SelectedItems[0]); 
     if (userwindow.ShowDialog() == DialogResult.OK) 
     { 
      LsvUsersRefresh(); 
      toolStripStatusLabel1.Text = "User successfully modified!"; 
     } 
    } 
} 
+0

모두'lsv_ManageUsers'를 중심으로 회전하므로, 해당 변수가 초기화 된 코드를 포함하십시오. 동시에 불필요한 코드를 줄이십시오. 'class UserNew'의 대부분의 내용은 질문과 관련이 없습니다. 그것을 짧게 유지하면 우리 모두는 실제 문제에 집중할 수 있습니다. –

+1

데이터를 저장하는 것과 관련된 코드의 나머지 부분을 삭제했으며 예외와 아무 관련이 없습니다. 예외는 여기에'(Users) lsv_ManageUsers.SelectedItems [0]'을 던졌습니다. 'ListViewItem'은'Users' 클래스로 변환 될 수 없습니다. 사용자 객체가 필요하다면'ListView'를 채울 때 아이템의'Tag' 속성에 넣으십시오. '(Users) (lsv_ManageUsers.SelectedItems [0] .Tag)' –

+0

만약'DataGridView'를 사용한다면'DataSource'를'List '로 간단히 설정할 수 있습니다. 사용자가 행에서 'DataBoundItem'은 행 뒤에있는 데이터 바인딩 항목입니다. –

답변

0

lsv_ManageUsers.SelectedItems[0] 참조하는 항목은 당신의 Users 항목 중 하나가 아닌하는 ListViewItem이, 당신은 또 다른 하나에서 캐스팅 할 수 없습니다 왜냐하면 그들은 완전히 다른 것들이기 때문입니다.

세상이 이런 방식으로 작동하려면 각 ListViewItemTag 속성이 있습니다.이 속성은 사용자가 원하는 모든 용도로 자유롭게 사용할 수 있습니다. 목록에 ListViewItem을 추가 할 때 Users 항목을이 속성에 추가하는 것이 좋습니다. 그러면 클릭 처리기에서 참조를 취소 할 수 있습니다.

+0

ListViewItem Tag 속성을 올바르게 설정해야합니까? 나는 다음과 같이 설정했다. -'Users something = (Users) lsv_ManageUsers.SelectedItems [0] .Tag; 그리고 @Reza Aghaei가 참조하는 것은 내 버튼 클릭 핸들러의 주석에서 말했다 :'(Users) lsv_ManageUsers.SelectedItems [0] .Tag;'성공적으로 빌드되지만 my modify 변수에는 객체가 없습니다. –

+0

ListViewItem을 만들 때 목록에 표시하려면 ListViewItem을 작성해야합니다. 참조 할 항목을 참조하기 위해 만든 항목의 Tag 속성을 설정해야합니다. – LordWilmore

+0

마지막으로 해결할 수 있습니다. 당신의 지시에 문제가 있습니다. 고맙습니다! –

관련 문제