2014-11-17 2 views
-2

내 Windows 양식에서 데이터 격자보기를 사용하고 있습니다. 응용 프로그램을 실행할 때 data.i를 검색해야 할 때마다 내 응용 프로그램에 쿼리합니다. 텍스트 상자 키에 대한 검색 쿼리를 작성했습니다. event.my 응용 프로그램이 느리게 실행됩니다. 내 table.how 데이터의 약 2000 행이 난 빨리 내 검색하고 데이터베이스 상호 작용없이 데이터 그리드에서 데이터를 검색 할 수있는 옵션이 됐나 데이터베이스의 부하를 줄일 수 있습니다DataGrid보기에서 효율적인 검색을 수행하려면 어떻게해야합니까?

내 코드는 일단

private void txtsearch_KeyDown(object sender, KeyEventArgs e) 
    { 
     if (e.KeyCode == Keys.Down) 
     { 
      datagridproduct.Focus(); 
     } 
     string constring = @"Data Source=PC1\WINMANERP;Initial Catalog=Easylife;Integrated Security=True"; 
     //if (e.KeyCode == Keys.Enter) 
     //{ 


     using (SqlConnection con = new SqlConnection(constring)) 
     { 
      using (SqlCommand cmd = new SqlCommand("SELECT * FROM Item_Details where Item_Code LIKE '%' + @NM + '%' OR Item_Name LIKE '%' + @NM + '%' OR Supplier_Name LIKE '%'[email protected]+'%' OR Location LIKE '%' + @NM + '%'", con)) 
      { 
       cmd.Parameters.AddWithValue("@NM", txtsearch.Text); 
       cmd.CommandType = CommandType.Text; 
       using (SqlDataAdapter sda = new SqlDataAdapter(cmd)) 
       { 
        using (DataTable dt = new DataTable()) 
        { 
         sda.Fill(dt); 
         datagridproduct.DataSource = dt; 
        } 
       } 
      } 



     } 




    } 

답변

0

이하 모든 항목이 DataGridView에로드되었으므로 데이터베이스 대신 데이터 격자 셀을 사용하여 검색하고 검색 자와 일치하지 않는 행의 visible property hide를 설정할 수 있습니다 ch 기준. 전세계에서

private void Search(string item) 
    { 
     TotalRecords = 0; 
     List<DataGridViewRow> rows = new List<DataGridViewRow>(); 
     foreach (DataGridViewRow row in dataGridView1.Rows) 
     { 
      if (row.Cells[1].Value != null) 
      { 
       //search on 1st row of datagridview 
       if (row.Cells[1].Value.ToString() == item) 
       { 
        row.Visible = true; 
        TotalRecords += 1; 
       } 
       else 
       { 
        row.Visible = false; 
       } 
      } 
     } 
     dataGridView1.Refresh(); 
     labelTotalRecords.Text = "Total records = " + TotalRecords.ToString(); 
    } 
0

선언 DataTable의 사용자 데이터 테이블 선택 방법 (DataRow를 [] = dt.Select 행 ("COLUMNNAME ="+ urvalue)); 행에 따라 반복을 수행하거나 "DataTable dt1 = rows.CopyToDataTable();"을 사용할 수 있습니다. datagridproduct.DataSource = dt1;

답을 찾은 경우 대답을 유용하게 쓰면

관련 문제