【问题标题】:Problems with Filtering DataView & Display Back to Original Datagridview过滤 DataView 和显示返回原始 Datagridview 的问题
【发布时间】:2014-10-28 16:41:20
【问题描述】:

我有一个带有 cmets 的 MySQL 数据库,并且我已经使用这个函数在我的 dataGridView_flaggedComments 中填写了带有标记的 cmets:

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 中出现的标记 cmets 属于不同的股票价格(每只股票都有其唯一的代码和 Ticker_ID)。我正在尝试过滤当前的dataGridView_flaggedComments,以便它只显示我从comboBox_stockIndex 中选择的内容。

但是,我的代码会以某种方式从数据库中检索此特定符号的所有 cmets,而不是过滤 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"]);
            }
        }
    }
}

【问题讨论】:

    标签: c# mysql datagridview filter dataview


    【解决方案1】:

    您的 comboBox_stockIndex_SelectedIndexChanged 处理程序中有一个非常奇怪的代码。

    看看:在组合框的每个索引更改时,您都在使用 always same 查询查询数据库,而在稍后的代码中,您实际上并没有使用此查询的结果。这是为了什么?

    让我们更进一步。您正在迭代您的 dataGridView_flaggedComments 行并多次设置您的 RowFilter。看起来没有必要,因为只会进行最后一个过滤器。

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

    1. SELECT Ticker_ID, Symbol FROM tickers 查询数据库,但 SelectedIndexChanged 处理程序之外,并将其存储到数据表中。
    2. SelectedIndexChanged 处理程序中迭代该数据表,并找到“符号”等于您的comboBox_stockIndex.SelectedItem 的行。
    3. RowFilter 设置为“Tickers_Ticker_ID = Ticker_ID from row you've found in previous point。然后返回,不要设置多个过滤器。

    备注:我不知道您的tickers 数据库表被更改的频率,所以如果它非常频繁地更改,关于在SelectedIndexChanged 之外查询它的建议可能是错误的。

    【讨论】:

    • 嗨,安迪,我正在调查你的解释。 tickers数据库根本不会改变,它会在整个过程中保持不变。
    • 好的,这意味着我的建议是正确的,每次您的组合框选择的索引发生更改时您不应该查询此表。
    • 嗨,安迪,你介意看看pastebin.com/b9jq3wHn 吗?即使我已经简化了comboBox_stockIndex_SelectedIndexChanged,代码仍然不起作用,它仍然会显示Tickers_Ticker_ID = 1 的所有cmets,而不仅仅是来自dataGridView_flaggedComments 的标记cmets。 DataViewDataGridView 绑定有问题?
    • @Shyuan,这是您在 pastebin 的示例中的代码字符串:dv.RowFilter = string.Format("Tickers_Ticker_ID = '1'"); 所以您明确设置了 Tickers_Ticker_ID = 1 的过滤器。为什么您期望显示另一个结果? ;)
    • 嗨,安迪,在 pastebin 中,我明确地将过滤器设置为 Tickers_Ticker_ID = 1,因为我想向您展示问题不在于 Tickers_Ticker_ID = 1,而在于其他地方,因为此过滤器会显示所有Ticker_ID 1 cmets 而不是 Ticker_ID 1 的标记 cmets。DataView 部分存在问题,但我无法解决。我提出了一个新问题 (stackoverflow.com/questions/26706066/…) 并且确实有人在谈论 DataView,我需要时间来理解。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-26
    • 2021-06-02
    • 1970-01-01
    • 1970-01-01
    • 2021-07-27
    相关资源
    最近更新 更多