2014-10-28 1 views
-1

У меня есть база данных MySQL с комментариями, и я уже заполнил мой dataGridView_flaggedComments с помеченными комментариями с помощью этой функции:Проблем с фильтрацией DataView и дисплей Назад к Оригинальному DataGridView

private void button_Search1_Click(object sender, EventArgs e) 
{ 
    commentCount = 0; 
    //comboBox_stockIndex.SelectedIndex = 0; 
    richTextBox_flaggedComments.Clear(); 
    dataGridView_flaggedComments.Refresh(); 
    DataTable flaggedcomments = new DataTable("flaggedcomments"); 
    using (MySqlConnection sqlConn = new MySqlConnection(strProvider)) 
    { 
     using (MySqlDataAdapter da = new MySqlDataAdapter("SELECT Comment_ID, Comments_Date, Author, Title, Comments_Comment, Tickers_Ticker_ID FROM comments ORDER BY Comments_Date ASC", sqlConn)) 
     { 
      da.Fill(flaggedcomments); 
     } 
    } 
    StringBuilder sb = new StringBuilder(); 
    string[] words = File.ReadAllLines(sourceDirTemp + comboBox_crimeKeywords.SelectedItem.ToString() + ".txt"); 
    var query = flaggedcomments.AsEnumerable().Where(r => 
words.Any(wordOrPhrase => Regex.IsMatch(r.Field<string>("Comments_Comment"), @"\b" + Regex.Escape(wordOrPhrase) + @"\b", 
RegexOptions.IgnoreCase))); 

    dataGridView_flaggedComments.DataSource = query.AsDataView(); 
} 

В помечено комментариях появляются в dataGridView_flaggedComments относятся к разным ценам на акции (каждый запас имеет свой уникальный символ и его Ticker_ID). Я пытаюсь отфильтровать текущий dataGridView_flaggedComments так, чтобы он показывал только то, что я выбрал из comboBox_stockIndex.

Однако, мой код каким-то образом получит все комментарии для этого конкретного символа из базы данных, а не фильтрацию того, что находится в dataGridView_flaggedComments. Может ли кто-нибудь указать, что пошло не так?

Я рассмотрел довольно много вопросов в SO, но не мог действительно связать это. Вот мой код, и было бы очень полезно, если бы я мог помочь! Спасибо!

private void comboBox_stockIndex_SelectedIndexChanged(object sender, EventArgs e) 
{ 
    DataTable link_stockIndex = new DataTable("link_stockIndex"); 
    using (MySqlConnection sqlConn = new MySqlConnection(strProvider)) 
    { 
     using (MySqlDataAdapter da = new MySqlDataAdapter("SELECT Ticker_ID, Symbol FROM tickers", sqlConn)) 
     { 
      da.Fill(link_stockIndex); 
     } 
    } 
    foreach (DataRow da in link_stockIndex.Rows) 
    { 
     for (int i = 0; i < dataGridView_flaggedComments.Rows.Count - 1; i++) 
     { 
      if (dataGridView_flaggedComments.Rows[i].Cells["Tickers_Ticker_ID"].Value.ToString() != "" && comboBox_stockIndex.SelectedItem.ToString() == da["Symbol"].ToString()) 
      { 
       (dataGridView_flaggedComments.DataSource as DataView).RowFilter = string.Format("Tickers_Ticker_ID = '{0}'", da["Ticker_ID"]); 
      } 
     } 
    } 
} 

ответ

1

У вас очень странный код в вашем обработчике comboBox_stockIndex_SelectedIndexChanged.

Просто посмотрите: при каждом изменении индекса combobox вы запрашиваете базу данных с всегда таким же запросом, а позже в коде вы фактически не используете результаты этого запроса. Зачем это?

Пошли дальше. Вы повторяете свои строки dataGridView_flaggedComments и несколько раз устанавливаете RowFilter. Выглядит довольно ненужно, так как будет проходить только последний фильтр.

Похоже, ваш код должен быть что-то вроде этого:

  1. базы данных запросов для SELECT Ticker_ID, Symbol FROM tickers, как вы сделали, но вне обработчика SelectedIndexChanged, и хранить его в DataTable.
  2. В обработчике SelectedIndexChanged итерации над этим datatable, и найдите строку, имеющую «Символ», равную comboBox_stockIndex.SelectedItem.
  3. Набор RowFilter как «Tickers_Ticker_ID = Ticker_ID из строки вы нашли в предыдущем пункте и возвращение, не установлен несколько фильтров

Примечания:.. Я не знаю, как часто ваша таблица tickers база данных является изменено, поэтому, возможно, предложение о запросе его вне SelectedIndexChanged неверно, если оно изменяется очень часто.

+0

Привет, Энди, я изучаю ваше объяснение. База данных 'tickers' не изменится вообще, она останется неизменной на протяжении всей весь процесс. – Shyuan

+1

Хорошо, это означает мое предложение, что вы не должны запрашивать эту таблицу каждый раз, когда ваш combobox выбрал индекс ha s изменилось правильно. –

+0

Привет Энди, не возражаете ли вы взглянуть на https://pastebin.com/b9jq3wHn? Даже когда я уже упростил 'comboBox_stockIndex_SelectedIndexChanged', код все еще не работает, он все равно покажет все комментарии для Tickers_Ticker_ID = 1, а не только из помеченных комментариев из' dataGridView_flaggedComments'. Что-то не так с привязкой DataView или DataGridView? – Shyuan

Смежные вопросы