【问题标题】:rowsRemoved event handler called oncerowsRemoved 事件处理程序调用一次
【发布时间】:2014-05-25 14:31:41
【问题描述】:

我正在使用 Windows 窗体中的 C# 软件,其中有一个 datagridView,用户可以在其中删除行。

我想立即捕获删除行的事件,问题是事件处理程序 RowsRemoved 在每个删除的行中调用一次。在 Msdn 中保持那个 e,事件 Argument 包含已删除的行数,但在调试时我看到这个数字始终为 1。

只有当所选行的最后一行已被删除且已删除的行总数为时,我该怎么做才能调用此事件?

非常感谢您的帮助!!!

【问题讨论】:

    标签: c# winforms events datagridview


    【解决方案1】:

    删除行组时,如果选择了“新行”行,则选定行数为 0 或 1:

        private void dataGridView1_RowsRemoved(object sender, DataGridViewRowsRemovedEventArgs e)
        {
            MessageBox.Show("Row deleted");
            if ((dataGridView1.SelectedRows.Count==0)
                || ((dataGridView1.SelectedRows.Count == 1)
                &&(dataGridView1.SelectedRows[0].IsNewRow)))
            {
                MessageBox.Show("Set of rows deleted");
            }
        }
    

    【讨论】:

    • 太棒了!谢谢你。不过不介意一点解释......(你也应该接受这个答案,即使它是你的,所以它出现在顶部)
    • 谢谢。我不明白“接受这个答案”。现在它完成了!问候!
    【解决方案2】:

    使用逻辑来检测它是否是最后一行。当您删除一整行行时,它甚至会删除每行?

    void dgv_RowsRemoved(object sender, DataGridViewRowsRemovedEventArgs e)
    {
        if (e.RowIndex == (dgv.RowCount - e.RowCount))
        {
            // Do stuff
        }
    }
    

    【讨论】:

    • 嗨 MrFox,我的问题表述不正确。我的意思是我只想捕获一次事件,而不是每行一次。对于“最后一行”,我想说“最后选择的行”而不是 datagridview 中的最后一行......无论如何,你的回答给了我一个想法,我将作为答案发布。非常感谢!
    • @Fleve 请重新格式化您的问题,使其清晰且对其他人有用。
    • 完成!感谢您的评论!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-04
    • 1970-01-01
    相关资源
    最近更新 更多