DataTable.Columns.Clear 和列排序后的 DataAdapter.Fill NullReferenceException

发布于 2024-12-01 07:00:13 字数 717 浏览 1 评论 0原文

我将 MySQL 与 C# 和 DataGridView 结合使用。

当用户单击某列对其进行排序,然后执行强制清除该列的操作时,就会出现此问题(当用户在使用复选框中勾选要查看的列时会发生此问题)。

实际的异常是在 dataAdapter.Fill(dt) 处引发的。

当用户不对实际列进行排序时,该代码可以正常工作。在用户重新排列列后它也可以正常工作。

这是我的代码:

    public void GetDataAndFilter(string selectQuery, bool colChange)
    {
        using (var conn = connect())
        {
            MySqlCommand cmd = new MySqlCommand(selectQuery, conn);
            dataAdapter = new MySqlDataAdapter(cmd);
            dt.Clear();

            if (colChange)
                dt.Columns.Clear();

            dataAdapter.Fill(dt);

            conn.Close();
        }
    }

我已经尝试解决这个问题有一段时间了,但我已经没有想法了。

感谢您抽出时间,我很感激。

I'm using MySQL with C# and a DataGridView.

The problem happens when the users clicks on a column to sort it, followed by an action which forces the columns to be cleared (Happens when an user ticks off which columns to see in using checkboxes).

The actual exception is thrown at dataAdapter.Fill(dt).

The code works fine when the user does not sort the actual columns. It also works fine after the user has rearranged columns.

This is my code:

    public void GetDataAndFilter(string selectQuery, bool colChange)
    {
        using (var conn = connect())
        {
            MySqlCommand cmd = new MySqlCommand(selectQuery, conn);
            dataAdapter = new MySqlDataAdapter(cmd);
            dt.Clear();

            if (colChange)
                dt.Columns.Clear();

            dataAdapter.Fill(dt);

            conn.Close();
        }
    }

I've been trying to fix this for some time but I've run out of ideas.

Thanks for your time, I appreciate it.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

酸甜透明夹心 2024-12-08 07:00:13

我认为最好清除以下行:

dt.Clear();

dt.Columns.Clear();

并再次实例化您的 dt,而不是清除其列及其本身。

dt = new DataTable();

希望这有帮助。

I think it's better to clear following line :

dt.Clear();

dt.Columns.Clear();

and instantiate your dt again instead of clear its column and itself.

dt = new DataTable();

hope this help.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文