gpt4 book ai didi

c# - 删除所选单元格的行窗口窗体

转载 作者:太空宇宙 更新时间:2023-11-03 11:11:55 25 4
gpt4 key购买 nike

想法是:当用户选择一个或多个单元格然后单击删除按钮时,Datagridview 将删除这些选定单元格的整行。当没有显示如何删除多个单元格行时,我的想法是崩溃的。如果删除选定的行或单个单元格,问题很简单。但是多细胞问题是...

可能会出现一些问题:索引越界,删除整个gridview...

假设gridview内容2列,gridview中的数据不是来自db。

我试过这段代码:

while(dgv1.selectedCells.count>0){
dgv1.removeAt(dgv1.selectedCells[0].RowIndex);
}

但是这个删除了整个 datagridview,因为当 gridview 删除一行时,它会选择第一个单元格(第一列,第一行)。

然后我试试这个:

List<int> rowToDelete = new List<int>();
foreach(DataGridViewCell cell in dgv1.selectedCells){
rowToDelete.add(cell.RowIndex);
}

然后从列表中删除 gridview 行,但这可能会出现相同的行索引被添加,导致错误的行被删除,并且可能使代码更复杂。请帮忙。

编辑:正如 yatrix 推荐的那样,我使用了这段代码(我想我得到了他推荐的权利)

for (int i = dataGridView1.SelectedCells.Count -1; i >=0; i--)
{
dataGridView1.Rows.RemoveAt(dataGridView1.SelectedCells[i].RowIndex);
}

但是当我选择的单元格多于 Rows.Count 时,会出现索引超出范围的异常。另外,如果我在同一行中选择 2 个单元格,则会导致删除错误的行(下一行)。这是我的主要问题。

Ps:我正在尝试制作一个程序来重命名windows中的多个文件。

最佳答案

它完成了所需的工作,试试吧。

List<int> rowsToDelete = new List<int>();

foreach (DataGridViewCell cell in this.dgv1.SelectedCells)
{
if (rowsToDelete.Contains(cell.RowIndex) == false)
rowsToDelete.Add(cell.RowIndex);
}

//用户可以使用 ctrl 键选择单元格/行,因此请确保按降序对行索引进行排序。

rowsToDelete=rowsToDelete.OrderByDescending(rowIndex => rowIndex).ToList();          
foreach (Int32 rowIndex in rowsToDelete)
{
this.dgv1.Rows.RemoveAt(rowIndex);
}

rowsToDelete.Clear();

关于c# - 删除所选单元格的行窗口窗体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13678396/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com