【发布时间】:2015-11-16 14:02:14
【问题描述】:
我是 C# 新手,这不是重复的问题,我在这里检查了类似的问题,但不是运气。
我有 2 个按钮和 DataGridView1。
ButtonAdd 添加一行,buttonDelete 删除一行。
首先,我单击添加以添加新行并始终保持最后一行被选中。
其次,当我想删除最后一行或任何其他行(通过单击它们)时,它可以完美运行,并且已删除的行保持选中状态(如我所愿)。
现在我添加一行,然后自动选择最后一行,然后当我想删除最后一行时(不点击它但它已经被选中)它给了我一个错误:
“索引超出范围。必须为非负数且小于集合的大小”
但是如果我点击它,它会起作用并且该行保持选中状态。
所以我的问题是我无法删除最后一行而不点击它(但最后一行实际上已经被选中作为添加行的结果)。我想删除它并保持选中的行。 请帮忙,谢谢
public partial class Form1 : Form
{
Int RowIndex;
Int RowCount;
{
InitializeComponent();
}
private void buttonAdd_Click(object sender, EventArgs e)
{
RowIndex = dataGridView1.Rows.Count - 1;
dataGridView1.Rows.Add(1, "pizaa", 3); //add rows to dataGridView;
dataGridView1.Rows[RowIndex].Selected = true; //select the added row
}
private void buttonDelete_Click(object sender, EventArgs e)
{
RowCount = dataGridView1.Rows.Count;
RowIndex = RowCount - 1;
switch (RowCount)
{
case 0: /// no Rows to delete
break;
case 1: /// only one Row to delete
dataGridView1.Rows.RemoveAt(dataGridView1.SelectedRows[0].Index);
break;
default: // otherwise
dataGridView1.Rows.RemoveAt(dataGridView1.SelectedRows[0].Index); //delete the selected
dataGridView1.Rows[dataGridView1.SelectedCells[0].RowIndex].Selected = true; // select same row after deleting it.
break;
}
}
}
【问题讨论】:
-
如果最后一行被删除,则行数减少 1,因此您无法选择与您删除的行具有相同索引的行。错误是由删除产生的还是由删除后的选择产生的?
-
保罗。我知道并且我虽然知道这一点,但是只有当我单击它并且该行保持选中状态时我才能删除最后一行(因此它工作得很好)。但是如果我不点击它(但它已经被选中)我不能删除它。
-
我认为对您不想要的行为负责的是属性
AllowUserToAddRows(您可能已将其设置为true)。这种情况的特点是它显示了最后一行(供用户输入信息),这并不完全被认为是这样。即:你认为DataGridView中还剩下一行,但事实并非如此。将此属性设置为 false,这样您就有了一个完全可控的情况(您可能需要更正代码的某些部分以避免错误)。 -
您需要选择特定的单元格吗?将
SelectionMode更改为FullRowSelect按您的意愿工作。 -
瓦罗卡巴。我同意你的观点,但我已经将 AllowUserToAddRows 设置为 false,但仍然无效。
标签: c#