2017-05-18 21 views
0

私はテキストボックスにデータを入力する通常の検索機能を持つプログラムの一部を持っており、ユーザーが入力した内容に基づいて結果を表示します。ここに私のコードは次のとおりです。データグリッドにテキストボックスで敏感な検索結果を表示する簡単な方法はありますか?

private void textBox1_TextChanged(object sender, EventArgs e) 
{ 
    Boolean find = false; 
    if (cmbSearchFilter.Text == "Product Name") 
    { 
     int row = 0; 
     string line, search; 
     string[] strArray = new string[6]; 
     dataGridView1.Rows.Clear(); 
     dataGridView1.ColumnCount = 7; 
     dataGridView1.Columns[0].Name = "Nugget ID"; 
     dataGridView1.Columns[1].Name = "Nugget Name"; 
     dataGridView1.Columns[2].Name = "Nugget Description"; 
     dataGridView1.Columns[3].Name = "Nugget Ingredient"; 
     dataGridView1.Columns[4].Name = "Nugget Stock"; 
     dataGridView1.Columns[5].Name = "Nugget Price"; 
     F = new FileStream("Nugget.txt", FileMode.Open, FileAccess.Read); 
     R = new StreamReader(F); 
     search = txtSearch.Text; 
     while ((line = R.ReadLine()) != null) 
     { 
      strArray = line.Split(new string[] { "#" }, StringSplitOptions.None); 
      if (search.Equals(strArray[1])) 
      { 
       find = true; 
       dataGridView1.Rows.Add(); 
       String[] s = line.Split('#'); 
       for (int i = 0; i <= s.Count() - 1; i++) 
       { 
        dataGridView1[i, row].Value = s[i]; 
       } 
       row++; 
      } 
     } 
     R.Close(); 
     F.Close(); 
    } 
} 

私が何をコンボボックスで選択するユーザーに基づいてIF条件を使用しています。ですから、コードとこの問題の問題は問題ありません。戻る主な問題へ

、私は、例えば、検索結果が応答作りたい私は、テキストファイルにこのデータをしている場合:DGVに

Chicken Nugget 
Cheese Nugget 
Tofu Nugget 
Vegetable Nugget 

まず、ユーザタイピング「C」単語、なりますチキンナゲットとチーズナゲットが表示されます。次に、「h」(「C」の後)と入力すると、チキンナゲットとチーズナゲットが表示されます(もう一度)。第3に、「Ch」の後に「e」と入力すると、結果はチーズナゲットだけが表示されます。それでは、これを解決する簡単なコードはありますか?

答えて

0

前述のように、キーストロークごとにグリッドを読み込む代わりに、フォームロード時に1回だけ行うことができます。このコードは、フォームのロードイベントに移動できます。

private void LoadGrid() 
{ 
    int row = 0; 
    string line; 
    string[] strArray = new string[6]; 
    dataGridView1.Rows.Clear(); 
    dataGridView1.ColumnCount = 7; 
    dataGridView1.Columns[0].Name = "Nugget ID"; 
    dataGridView1.Columns[1].Name = "Nugget Name"; 
    dataGridView1.Columns[2].Name = "Nugget Description"; 
    dataGridView1.Columns[3].Name = "Nugget Ingredient"; 
    dataGridView1.Columns[4].Name = "Nugget Stock"; 
    dataGridView1.Columns[5].Name = "Nugget Price"; 
    FileStream F = new FileStream("Nugget.txt", FileMode.Open, FileAccess.Read); 
    StreamReader R = new StreamReader(F); 

    while ((line = R.ReadLine()) != null) 
    { 
     strArray = line.Split(new string[] { "#" }, StringSplitOptions.None); 

     dataGridView1.Rows.Add(); 
     String[] s = line.Split('#'); 
     for (int i = 0; i <= s.Count() - 1; i++) 
     { 
      dataGridView1[i, row].Value = s[i]; 
     } 
    } 

    R.Close(); 
    F.Close(); 
} 

テキストのセクションを検索するには、文字列「Contains」メソッドを使用できます。比較される各文字列を小文字に変換して、大文字と小文字を区別しないようにすることができます。 DataGridViewRow.Visibleプロパティを使用すると、検索に一致する行のみを表示できます。

private void textBox1_TextChanged(object sender, EventArgs e) 
{ 
    string search = txtSearch.Text; 

    foreach (DataGridViewRow row in dataGridView1.Rows) 
    { 
     if (row.Cells["Nugget Name"].Value != null) 
     { 
      string productName = row.Cells["Nugget Name"].Value.ToString(); 
      row.Visible = productName.ToLower().Contains(search.ToLower()); 
     } 
    } 
} 
0

FとRは宣言されていません。 各文字をテキストボックスに入力すると、すべてのdatagridview列が再作成され、ファイルを開いて読み込み、dgvを手動で入力します。私はおそらく、ファイル情報を保持するためにクラスレベルで文字列のリストを作成し、それが空であれば初めて入力し、そのリストをdgvのデータソースとして使用します。

関連する問題