循环遍历单词/短语列表,与数据库表行匹配

时间:2014-06-22 23:49:09

标签: c# mysql regex datagridview

我有.txt中的单词/短语列表(新行中的每个单词/短语),我想循环遍历每个单词/短语,并检查这些单词/短语是否出现在评论表的第6列中。我无法解决下面的代码,尽管有匹配的“关键字”,我的datagridview中没有任何内容,任何人都可以查看/更正我的代码吗?谢谢。

private void button_Search1_Click(object sender, EventArgs e)
{
    DataTable flaggedcomments = new DataTable("flaggedcomments");
    using (MySqlConnection sqlConn = new MySqlConnection(strProvider))
    {
        using (MySqlDataAdapter da = new MySqlDataAdapter("SELECT Comment_ID, Comments_Date, Comments_Time, Author, Title, Comments_Comment FROM comments ORDER BY Comments_Date ASC, Comments_Time ASC", sqlConn))
        {
            da.Fill(flaggedcomments);
        }
    }
    string[] words = File.ReadAllLines(sourceDirTemp + "a_list_of_words_and_phrases.txt");
    foreach (DataRow da in flaggedcomments.Rows)
    {
        string itemComments = da[5].ToString();
        if (words.Any(wordOrPhrase => Regex.IsMatch(itemComments, @"\b" + Regex.Escape(wordOrPhrase) + @"\b", RegexOptions.IgnoreCase)))
        {
            dataGridView_flaggedComments.Rows.Add(da);
            string itemTitle = da[4].ToString();
            string itemDate = da[1].ToString().Replace(" 12:00:00 AM", "");
            string itemTime = da[2].ToString();
            string itemAuthor = da[3].ToString();
            string itemCommentID = da[0].ToString();

            richTextBox_flaggedComments.AppendText("Date: " + itemDate + "\nTime: " + itemTime + "\nCommenter: " + itemAuthor + "\nTitle: " + itemTitle + "\nDescription: " + itemComments + "\nComment ID: " + itemCommentID + "\n\n--------\n\n");
        }
    }
}

我认为Rows.Add(da)行会起作用,但是当我点击按钮时,它会给出错误,说明没有行可以添加到没有列的datagridview控件。

示例“Comments_Comment”就是例如。

  在收购苏格兰寡妇投资合伙公司获得监管部门批准后,安本资产管理公司将发布2月28日的两个月的交易更新。分析师的预期:“两个月内,我们预计管理资产将减少1880亿英镑3第一季度的百分比。

1 个答案:

答案 0 :(得分:2)

如何使用数据绑定,而不是尝试向gridview添加行。您可以使用以下代码替换代码中的foreach

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();

您需要在Visual Studio项目中为此工作引用System.Data.DataSetExtensions.dll。