2012-12-24 2 views
0

저는 C#에서 매우 새롭습니다. 테이블 데이터를 표시하기 위해 DataGrid를 사용하는 작은 GUI 데이터베이스 응용 프로그램을 작성했습니다. 그리드의 행을 편집 할 때 update 버튼을 누르면 tableadapter의 업데이트 기능이 호출되고 변경 사항이 DB로 다시 전달됩니다. 그런 다음 tableadapter의 업데이트 기능을 호출하는 행 변경 이벤트에 대한 핸들러를 구현했습니다. 그러나이 값이 변경되고 키를 입력하면이 핸들러가 호출되고 InvalidOperationException이 발생합니다. "이 명령과 관련된 열려있는 DataReader가 이미 열려 있어야합니다."라는 메시지와 함께 InvalidOperationException이 발생합니다. 데이터베이스는 어쨌든 변경됩니다. 예외를 발생시키는 것을 멈추는 방법. 연결 문자열에서 여러 활성 결과 집합을 true로 설정했습니다.WPF DataGrid 업데이트 데이터베이스

생성자

public WSim(MainWindow h) 
{ 
    InitializeComponent(); 

    //database connection with strongly typed dataset 
    usersAdapter = new testDBDataSetTableAdapters.usersTableAdapter(); 
    users = usersAdapter.GetUsers(); 

    users.usersRowChanged +=new testDBDataSet.usersRowChangeEventHandler(users_usersRowChanged); 

    this.DataContext = users.DefaultView; 
} 

행 변경된 이벤트 핸들러

private void users_usersRowChanged(object sender, testDBDataSet.usersRowChangeEvent e) 
{ 
    output.Content = "Row Modified"; 
    usersAdapter.Update(users); 
} 

DataGrid 구성 XAML

<DataGrid Height="200" HorizontalAlignment="Left" Margin="26,249,0,0" Name="userGrid" VerticalAlignment="Top" Width="381" AutoGenerateColumns="True" 
       SelectionMode="Extended" SelectionUnit="FullRow" ItemsSource="{Binding}" 
       CanUserReorderColumns="True" CanUserResizeColumns="True" CanUserSortColumns="True" 
       CanUserAddRows="True" CanUserDeleteRows="True"/> 

답변

0

예외가 적혀에게 먼저 독자를 닫아야합니다. 당신은 충분한 정보를 제공하지 못했고 더 설명 할 수는 없습니다. 그러나 이것을보십시오 link. 나는 그것이 당신을 도울 것이라고 생각합니다.

+0

그러나 문제는 SQLDataReader를 수동으로 여는 것이 아니라는 것입니다. 필자는 데이터 소스 도구를 사용하여 새 데이터 소스를 추가했으며 관련된 데이터 어댑터가있는 데이터 세트를 제공했습니다. 어댑터의 Get() 메서드를 사용하여 테이블에서 결과를 가져오고 Update 메서드를 사용하여 데이터베이스를 업데이트합니다. 어떻게 데이터 렌더러를 제어해야합니까? –

+0

@SaifulShubho 질문을 업데이트하고이 메서드를 제공 할 수 있습니다 :'usersAdapter.Update (users);'. – Ramin

+0

Visual Studio에서 만든 데이터 소스를 사용하고있어 어디에서 코드를 얻을 수 있는지 잘 모르겠습니다. 하지만 디자이너에서 업데이트 방법 –