2014-10-28 36 views
-1

我有意见MySQL数据库,我已经填补了我dataGridView_flaggedComments使用此功能标记的评论:与过滤数据视图和问题显示回到最初的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中的内容。任何人都可以指出哪里出了问题?

我在这里经历了很多问题,但并没有真正涉及到它。这是我的代码,如果我能得到一些帮助,我将非常感激!谢谢!

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处理程序中有一个非常奇怪的代码。

只是看一看:对于查询数据库的每个索引变化,您都在查询总是和查询相同,并且在后面的代码中您实际上并未使用此查询的结果。这是什么?

让我们走得更远。您正在迭代您的dataGridView_flaggedComments行,并多次设置您的RowFilter。看起来相当不必要,因为只有最后一个过滤器会发生。

它看起来像你的代码应该是这样的:

  1. 查询数据库作为SELECT Ticker_ID, Symbol FROM tickers你做,但的SelectedIndexChanged处理程序,并将其存储到数据表。
  2. SelectedIndexChanged处理程序遍历该数据表,并找到一个“符号”行等于您的comboBox_stockIndex.SelectedItem
  3. 设置RowFilter像“Tickers_Ticker_ID =从行Ticker_ID您在前面点已经找到并返回,不要设置多个过滤器

备注:我不知道你tickers数据库表是多么频繁改变,所以也许关于查询SelectedIndexChanged以外的提示是错误的,如果它非常频繁地更改

+0

嗨,安迪,我正在研究你的解释,'蒂克斯'数据库根本不会改变,它将保持不变整个过程 – Shyuan 2014-10-29 12:39:53

+1

好吧,这意味着我的建议你不应该查询这个表每次你的组合框选择指数哈改变是正确的。 – 2014-10-29 12:42:56

+0

嗨安迪,你介意看看https://pastebin.com/b9jq3wHn?即使我已经简化了'comboBox_stockIndex_SelectedIndexChanged',代码仍然不起作用,它仍然会显示Tickers_Ticker_ID = 1的所有注释,而不仅仅是来自'dataGridView_flaggedComments'的标记注释。 DataView或DataGridView绑定有问题吗? – Shyuan 2014-11-02 23:29:16