2011-08-24 5 views
0

C# 및 DataGridView와 함께 MySQL을 사용하고 있습니다.DataAdapter.Fill NullReferenceException DataTable.Columns.Clear 및 열 정렬 후

사용자가 열을 클릭하여 정렬 한 다음 열을 강제로 지우는 동작이 발생하면 문제가 발생합니다 (사용자가 확인란을 사용하여 볼 열을 선택하지 않은 경우 발생).

실제 예외는 dataAdapter.Fill (dt)에서 발생합니다.

사용자가 실제 열을 정렬하지 않으면 코드가 제대로 작동합니다. 사용자가 열을 재 배열 한 후에도 잘 작동합니다. 나는 몇 시간 동안이 문제를 해결하기 위해 노력했지만 나는 아이디어가 부족했습니다

public void GetDataAndFilter(string selectQuery, bool colChange) 
    { 
     using (var conn = connect()) 
     { 
      MySqlCommand cmd = new MySqlCommand(selectQuery, conn); 
      dataAdapter = new MySqlDataAdapter(cmd); 
      dt.Clear(); 

      if (colChange) 
       dt.Columns.Clear(); 

      dataAdapter.Fill(dt); 

      conn.Close(); 
     } 
    } 

:

내 코드입니다.

감사합니다. 고맙습니다.

dt.Clear(); 

dt.Columns.Clear(); 

을하고 DT 다시 대신 클리어의 열 자체를 인스턴스화 :

답변

1

나는 그것을 행 다음에 취소하는 것이 낫다 생각합니다.

dt = new DataTable(); 

희망이 도움이됩니다.

+0

안녕하세요, 고마워, :) 이제 colchange가 true 일 때마다 dt를 다시 인스턴스화합니다. 또한 bindinsource의 데이터 소스를 새 dt로 설정해야합니다. 칼럼 정렬이 느슨하지만 괜찮습니다 (추가/제거 된 열은 새 데이터를 모니터링 할 때만 수행됩니다). – DkM