У меня есть эта функция button_Search1_Click
для поиска комментариев, которые соответствуют ключевым словам, а затем отображать эти помеченные комментарии в dataGridView_flaggedComments
.DataView RowFilter не фильтрует строки на DataGridView
Далее, если есть какие-либо изменения на comboBox_stockIndex
, я хочу, чтобы фильтр иметь место то есть фильтровать помеченных комментарии в dataGridView_flaggedComments
с Tickers_Ticker_ID
из 1
. Но когда я это делаю, все комментарии (независимо от того, помечены или нет) относятся к Tickers_Ticker_ID
из 1
на моем dataGridView_flaggedComments
. Он должен показывать только отмеченные комментарии для Tickers_Ticker_ID
из 1
, не все комментарии.
Я думаю, что что-то не так с DataSource
, но я не мог понять это. Любая помощь будет очень высоко оценена! Спасибо!
(Если бы я скучал любые подобные вопросы, пожалуйста, указать на это. Большое спасибо!)
private void button_Search1_Click(object sender, EventArgs e)
{
commentCount = 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();
}
private void comboBox_stockIndex_SelectedIndexChanged(object sender, EventArgs e)
{
DataView dv = dataGridView_flaggedComments.DataSource as DataView;
if (dv == null)
throw new Exception("Bad Data Source type");
else
{
dv.RowFilter = string.Format("Tickers_Ticker_ID = '1'");
dataGridView_flaggedComments.DataSource = dv;
}
}
Привет, TaW, я обычно делал то, что вы сказали, повторите. Но я не хочу, чтобы это напоминало повторяющееся одно и то же, поэтому я пытаюсь «очистить» код. Невозможно ли исправить мой код? Например. вместо использования 'DataView', которые не содержат данных, может быть, я могу использовать что-то еще, чтобы он удерживал/запоминал текущие представленные данные в DGV? Любые советы будут высоко ценится. Спасибо! – Shyuan
Ну, либо вы делаете некоторую фильтрацию в коде несколько раз, либо сохраняете отфильтрованные данные в темном хранилище.DataTable - довольно очевидный выбор памяти imo, см. Обновленный ответ. – TaW
Привет, TaW, спасибо вам за руководство, мой вопрос может быть глупым, следует ли положить первую часть вашего кода в 'button_Search1_Click' или в новом классе ? Если я ставлю под 'button_Search1_Click', то я не смог бы получить доступ к' DS' в 'combo_filter_SelectedIndexChanged' из' button_Search1_Click', правильно? Кроме того, 'DataSet DS = новый DataSet();' отсутствует в коде? Спасибо за помощь! – Shyuan