2008-10-03 6 views
3

여기에는 프로덕션 데이터베이스와 테이블 및 뷰를 연결하는 프로젝트가 있습니다. 상속 한 코드는 사용자가 제공 한 자격 증명과 데이터베이스에서 제공하는 데이터베이스 위치를 사용하여 SqlConnection을 통해 SQL Server 데이터베이스에 연결합니다. 데이터가 필요할 때 연결 및 SQL 문자열을 사용하여 SqlDataAdapter를 만들고 새 DataSet을 채 웁니다. 그런 다음 데이터를 조작 한 후 테이블 열 이름을 적절한 표시 이름으로 바꾸고 표시합니다.C#의 동적 데이터베이스 바인딩

문제는 전체 프로세스가 느리고 케이크 위에 장식하면 많은 데이터가 ListView에 표시된다는 것입니다.이 데이터는 1 만 개의 데이터 행을 가져 오는 데는 적절하지 않습니다. 설계상의 이유로, 우리는 페이지를 열지 않을 것입니다. 검색 컨트롤이 있습니다. 그리고 가상의 ListView를 구현하여 제가 어디에 있었는지 간단하게 되돌릴 수 있습니다. 나는 이것이 단순히 ListView에 대한 잘못된 응용 프로그램이라고 생각합니다. 데이터베이스에 연결하고 레코드를 표시하고 있습니다. DataGridView에 대한 작업처럼 들립니다.

슬프게도, 단순히 은 작동하지 않습니다.. DataBridView를 DataBinder를 통해 연결 코드에서 가져온 DataSet에 바인딩하려고합니다. 그러나 DataGridView가 완전히 비어있는 동안 데이터가 DataSet에있는 것처럼 보입니다.

그러나 현재 데이터베이스 스키마와 내 자격 증명을 사용하여 테스트 데이터베이스에서 GUI 바인딩을 사용하면 치료가 효과적입니다. 하지만 충분히 유연하지 않기 때문에이 자료를 사용할 수 없습니다. 데이터베이스를 업데이트 할 때마다 변경해야하는 코드에서 스키마를 정의하고 싶지 않고 연결 문자열에 대한 액세스가 필요합니다. 생성 한 TableAdapter에서 가져 오는 것 같지 않습니다.

DataSet/BindingSource 솔루션 작업을 수행하기 위해 여기에 간단한 항목이 누락 되었습니까? 내가 틀린 나무를 짖고 있니?

어쨌든 구속력을 발휘할 가치가 있습니까? 내가 볼 수있는 모든 바인딩 물건은 저에게 90 %의 방법을 가져다 주지만, 연결 문자열을 수정할 수 없거나 원하는 방식으로 특정 열을 정렬 할 수없고, 정의 된 스키마를 제공하고 싶습니다. 손으로 쓴 코드는 최소한 방어 적으로 설계되고 매우 유연하지만 데이터베이스가 변경되는 즉시 중단 될 것입니다. 기능을 제거하지 않고 느린 솔루션이 이미 작동합니다. 작동하도록 일부 요구 사항을 포기해야한다면 우리가 가진 것을 처리 할 것입니다.

답변

1

테이블 이름을 지정한 경우 (다른 IIRC 첫 번째 테이블이 사용되는) 그것은 잘 작동합니다. 물론 DGV에 적절한 DataTable (DataSet 대신)을 제공하여 작업을 단순화 할 수 있습니다. DGV에서 자동 열 생성이 활성화되어 있는지 확인할 수도 있습니다. 그러나 ad-hoc DataTable에 바인딩하면 정상적으로 작동합니다. 나는 예제 등을 위해 항상 그것을 사용한다.

+0

아, 이쪽이 나를 더 멀리 잡았어. 이제 BindingSource가 작동합니다. (DataGridView는 BindingSource를보고 있지만 아무 것도 만들지 않았기 때문에 아무 것도하지 않습니다.) – Merus

1

쿼리를 전혀 변경할 수 없거나 게시물 끝에 언급 한 상황의 맥락에서만 이해할 수 없습니다.

하지만 가능한 경우 특정 종류의 페이징을 구현하고 데이터의 사용자가있는 특정 페이지의 행을 검색하는 것이 좋습니다. 결과 집합이 당신이 말한 것만 큼 큰 경우, 이것은 성능면에서 큰 차이를 만듭니다. 이것은 아마도 내 생각에 할 수있는 가장 큰 성능 향상 변화 일 것입니다. 그리고 현재 작동중인 listview 구현을 유지할 수 있습니다. 게다가 자신의 쿼리를 채우는 표가 있더라도 페이징 전략이 필요하거나 속도가 느릴 수도 있습니다.

난 그냥 구현에 대한 random article를 잡고 있지만 many others

편집을 찾을 수 있습니다 : 그것은 파산 아닌가요 경우 업데이트 된 질문에 관해서, 내 대답의 요점이었다, 그것을 해결 해달라고. 목록보기가 지금 작동하면 왜 변경합니까?

+0

페이징은 받아 들일 수없는 해결책이다. 모든 관련 데이터를 사용자가 쉽게 액세스 할 수 있어야하며 페이지 전체에 걸쳐 데이터가 누출되면 데이터 전체를 마우스 오른쪽 버튼으로 클릭하여 삭제하는 것이 조금 어렵습니다. – Merus

+0

괜찮습니다. 문제가 없습니다. 많은 사람들 중에서 단 하나의 제안은 당신이 얻을 것이라고 확신합니다. – mattlant

0

어댑터를 클릭 디자이너에서 데이터 집합을 열고 대중에게 (내부에 그것을 기본값) 연결을 변경, 당신은 당신의 문제의 나머지로

액세스 할 수 있습니다, 우리에게 codez을 보여 - datagridview 데이터 바인딩 잘 AFAIK 작동합니다 ...