Language/C#

[C#] 검색 기능 구현 - 입력하자마자 검색

서른마흔다섯개 2020. 1. 30. 16:24

 

<Form1.cs>

//생략      

private void Main_searchTextBox_KeyUp(object sender, KeyEventArgs e) //검색 기능 구현 할 textbox keyup이벤트
        {
            Thread.Sleep(40);

            commonfunction.Main_SearchTextBox(Main_searchTextBox.Text);
        }

 

 

 

<CommonFunction.cs>

String MainSearchResult;



        #region //Main.cs의 검색기능 메소드
        /// <summary>
        /// 검색텍스트박스 keypressEvent를 받아와 처리해 주는 메소드
        /// </summary>
        /// <param name="TextBoxInputValue"> KeypressEvent로 textbox에 입력된 값 </param>
        public void Main_SearchTextBox(String TextBoxInputValue)
        {
            DataTable form1DT_copy = form1.dt; // form1의 datatable form1DT_copy에 복사
            MainSearchResult = TextBoxInputValue;
            IEnumerable<DataRow> linq_row = null;

            DataTable form1DT_re = new DataTable();
            form1DT_re = form1DT_copy.Clone();

            if (MainSearchResult == "")
            {
               form1._dgv.DataSource = form1DT_copy;


            }
            else
            {
                //MainSearchResult가 ""이 아니면 일치하는 데이터 찾는 코드
                foreach (DataRow row in form1DT_copy.Rows)
                {
                    linq_row = from item in row.ItemArray
                               where item.ToString().ToLower().Equals(MainSearchResult.ToLower())
                               select row;
                    //입력된 값이 완전히 일치하는지 확인
                   
                    foreach (DataRow dt in linq_row)
                    {
                        form1DT_re.Rows.Add(dt.ItemArray);
                       
                    }
                  //linq 결과를 datatable에 넣어주는 작업
                }
                //입력된 값이 부분적으로 일치하는 경우 
              if(form1DT_re.Rows.Count== 0)
                {
                    foreach (DataRow row in form1DT_copy.Rows)
                    {
                      
                        linq_row = from item in row.ItemArray
                                   where item.ToString().ToLower().Contains(MainSearchResult.ToLower())
                                   select row;
                        //입력된 값이 부분적으로 일치하는지 확인
                        foreach (DataRow dt in linq_row)
                        {
                            form1DT_re.Rows.Add(dt.ItemArray);
                          
                        }

                    }
                }
                form1DT_re = form1DT_re.DefaultView.ToTable(true);
                form1._dgv.DataSource = form1DT_re;
                
            }
        }
        #endregion