【发布时间】:2019-02-06 10:18:22
【问题描述】:
我使用ArrayList 进行二分搜索。 datagridview 的行被添加到 ArryList。当我从 datagridview 中删除一行时,它几乎可以完美运行。问题是当我从顶部或底部和中间的 datagridview 中删除许多行时,它给了我一个错误。从ArrayList (datagridview) 中删除一行后,如何刷新或更新ArrayList?
错误:
'索引超出范围。必须是非负数且小于集合的大小。 参数名称:index'
我将行复制到 ArrayList 的代码:
我将此代码放入按钮MouseEnter 事件中,因此在我单击按钮进行搜索之前,它将所有内容复制到ArrayList。
foreach (var row in dataGridView2.Rows.Cast<DataGridViewRow>())
{
ArrayList[row.Index] = row.Cells[0].Value.ToString().Trim();
}
我对所选行的删除代码:
foreach (DataGridViewRow item in this.dataGridView2.SelectedRows)
{
dataGridView2.Rows.RemoveAt(item.Index);
return;
}
我在winform中的二分查找代码:
int index = this.ArrayList.BinarySearch(textBoxBinarySearch.Text);
if (index > -1)
{
dataGridView2.SelectionMode = DataGridViewSelectionMode.RowHeaderSelect;
dataGridView2.Rows[index].Selected = true;
dataGridView2.CurrentCell = dataGridView2.Rows[index].Cells[0];
MessageBox.Show("Index is equal to: " + index, "Binary Search");
}
错误发生在:
dataGridView2.Rows[index].Selected = true;
打开 csv 后,二分查找运行良好!
测试删除功能。
从 datagridview 中删除了更多行。
从datagridview中删除很多行后,如果我尝试搜索名称,就会出现错误。
我希望我不会错过我的描述中的任何信息。感谢您阅读它!
【问题讨论】:
-
错误出现在哪一行?
-
“删除”代码在哪里?
-
请注意,要使用 BinarySearch,列表应该已经排序
-
@rory.ap 我更新了我的问题
-
您的删除代码只删除了
SelectedRows...中的第一个...这是故意的吗?
标签: c# winforms arraylist datagridview binary-search