2012-06-12 1 views
0

기본 데이터가 데이터베이스에서 업데이트 될 때 자동으로 그리드를 새로 고치려고합니다. 이게 효과가 있지 않니? 또는 나는 무엇인가 놓치고 있냐?BindingSource.ListChanged 데이터가 변경되면 이벤트가 실행되지 않습니다 - 그렇지 않습니까?

DataSet 내에서 DataTable을 만들었습니다. 그런 다음 새로운 양식을 만들고 DataGridView를 추가했습니다. 실제로는 DevExpress 'XtraGrid를 사용하고 있지만 Microsoft 컨트롤 만 사용하려고합니다. 그리드의 왼쪽 상단에있는 메뉴를 사용하여 그리드 데이터 소스를 프로젝트 데이터 소스의 데이터 테이블에 설정합니다. 이렇게하면 데이터 집합, BindingSource 및 TableAdapter가 폼에 자동으로 추가됩니다.

BindingSource.ListChanged 이벤트를 추가하면 폼이로드 될 때 몇 번만 발생하지만 기본 데이터는 변경되지 않습니다.

데이터베이스의 데이터가 변경 될 때도 계속 켜져 야합니까? 또는 현재 VB.NET 프로세스의 다른 곳에서 데이터가 변경된 경우입니까?

도움 주셔서 감사합니다.

답변

1

listchanged 이벤트는 데이터가 db에서 변경 될 때가 아니라 바운드 개체가 변경 될 때만 실행됩니다.

당신이하는 SqlClient를 사용하여 DB에서 데이터를 검색하는 경우 당신은 당신의 응답을 http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqldependency.aspx

+0

흥미로운 것 같지만 SQL Dependency가 "깨지기 쉬운"것으로 묘사되는 것을 보았습니다 .... 쉬운 솔루션을 기대했습니다 =) – Trees

0

이 이벤트 기본 목록이 변경되거나 목록의 항목이 변경 될 때 발생합니다. db가 바뀌지 않았을 때.

여기서 데이터 세트 또는 데이터 테이블은 데이터베이스의 데이터에서로드되지만로드 된 데이터 세트는 데이터베이스와 데이터 세트 데이터 사이에 연결되지 않습니다. 데이터 세트를 저장/업데이트하거나 새로 고침해야하는 경우 관련 메소드를 호출하여 작업을 수행해야합니다.

데이터를 표시하는 동일한 UI에서 데이터를 변경하는 경우 gridview에 대한 변경 사항을 반영하기 위해 그리드 새로 고침 메서드를 호출하십시오.

+0

감사 SQL 의존성을 구현할 수 있지만 완전히 기본 목록과 기본 데이터의 차이점은 무엇입니까 ... 이해가 안 돼요? 그리드를 타이머 나 다른 것을 사용하는 것 이외의 다른 방법으로 자동으로 새로 고침시킬 방법이 없습니까? – Trees

1

DevExpress XtraGrid의 동작에 대해서는 잘 모르겠지만 목록에 대한 대부분의 데이터 바인딩의 경우 목록이 완전히 새로운 다른 목록으로 바뀌면 ListChanged 이벤트가 시작됩니다.

목록이 동일하지만 항목이 추가되면 변경된 목록으로 간주되지 않습니다. 일반적으로 INotifyCollectionChanged 인터페이스를 구현하는 항목을 추가해야합니다.

관련 문제