我在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;
}
}
感谢您的耐心,希望这有助于其他人!
答案 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;
查看完整代码,如果您可以提出任何其他建议,请执行以下操作:)