안녕하세요. 서종현 전문가입니다.
WinForm 에서 Oracle DB 데이터를 DataGridView에 바인딩한 후 , TextBox입력시 실시간 검색은 다음과 같이 간단히 구현할수있습니다.
TextBox의 TextChange이벤트에 타이머를 연결해 입력이 멈춘후 300ms 뒤에 DB 쿼리 실행
타이머 Tick 이벤트에서 Oracle에 LIKE 쿼리 실행후 DataTable에 결과 채워 DataGridView에 바인딩
쿼리는 인덱스 활용과 파라미터 바인딩으로 최적화하고 , 데이터가 크면 꼭 DB에서 필터링 하기
<예시코드>
Timer timer = new Timer { Interval = 300 };
timer.Tick += (s, e) => {
timer.Stop();
string keyword = textBox1.Text.Trim();
string sql = "SELECT * FROM events WHERE event_name LIKE '%' || :kw || '%'";
var cmd = new OracleCommand(sql, conn);
cmd.Parameters.Add(new OracleParameter("kw", keyword));
var dt = new DataTable();
new OracleDataAdapter(cmd).Fill(dt);
dataGridView1.DataSource = dt;
};
textBox1.TextChanged += (s, e) => timer.Start();
필터링 때마다 DB에서 쿼리해 데이터가 많아도 성능 유지가 좋습니다.