清空DataGridView

时间:2009-07-28 21:03:22

标签: c# winforms datagridview

我在C#中有一个datagridview,当用户点击“搜索”时,它会根据搜索条件填充客户。我遇到的问题是,当用户不止一次点击搜索按钮搜索客户时,或者如果用户想要进行不同的搜索,上次搜索的所有细节仍然在datagridview中。现在的主要问题不是没有删除列或添加额外的内容,而是在搜索多次后,datagridview中按钮的列索引变为“0”。

现在我已经找到了问题,我想我会在这里保留全部细节,以防将来有人想看看细节。看来问题是,当我删除custDataGridView.DataSource = null时;部分,一切似乎都有效

由于似乎存在一些含糊之处,以下是完整的代码:

        DataGridViewButtonColumn custAddJobSelect = new DataGridViewButtonColumn();
        Datatable dt = new Datatable();
        // ---> This was the culprit ---> custDataGridView.DataSource = null;
        dt.Rows.Clear();

        #region SQL connection String
        ...//CustQuery is the SQL stuff, conn is connection to DB.
        #endregion

        da = new System.Data.SqlClient.SqlDataAdapter(CustQuery, conn);
        da.Fill(dt);

        conn.Close();

        custDataGridView.DataSource = dt;


        if (AddJobGone == false)
        {

            AddJobGone = true;
            custAddJobSelect.DisplayIndex = 0;
            custDataGridView.Columns.Add(custAddJobSelect);
        }

        private void custDataGridView_CellContentClick(object sender, DataGridViewCellEventArgs e)
    {
        if (e.ColumnIndex == this.custDataGridView.Columns.Count - 1)
        {
            string addJobsCustNo = custDataGridView.Rows[e.RowIndex].Cells[0].FormattedValue.ToString();
            txtAddJobsCustNo.Text = addJobsCustNo;
            pnlAddJobSearchCustomer.Visible = false;
        }
    }

感谢您的耐心,希望这有助于其他人!

4 个答案:

答案 0 :(得分:1)

将DataSource设置为null应该可以解决问题,确保在尝试新搜索时遇到特定的代码集。例如,将其插入自己的过程并在搜索开始时调用该过程以确保清除该对象。说实话,除非您每次按下搜索按钮时都有理由不清除DataSource,否则围绕该部分代码的条件逻辑可能毫无意义。

答案 1 :(得分:0)

您的数据来源究竟是什么?它是DataTable,对象/实体列表,还是手动将行添加到DataGridView?

这可能说得很明显,但如果您的数据源是DataTable或列表,您应该确保在向其添加新搜索结果之前从列表中删除所有项目,而不是关注DataGridView本身

我假设您当前的DataSource = null解决方案不起作用,这将是一个明显的解释:)

答案 2 :(得分:0)

我猜你是手动添加行(dataGridView1.Rows.Add),在这种情况下将DataSource设置为null不会做任何事情。

答案 3 :(得分:0)

问题现在回答了,似乎是一个问题:

custDataGridView.DataSource = null;

查看完整代码,如果您可以提出任何其他建议,请执行以下操作:)