【问题标题】:datagridview rowsremoved event gets called every time data loads每次数据加载时都会调用 datagridview rowsremoved 事件
【发布时间】:2011-03-04 10:11:49
【问题描述】:

每次加载数据时都会调用 datagridview rowsremoved 事件。在某种程度上,每次加载数据时都会删除现有行,这在一定程度上也是有意义的。所以从技术上讲,事件应该被调用。

但是我如何区分它与实际按下的删除按钮。我认为不应该使用关键事件,那不是一个干净的方法。

任何帮助将不胜感激。

【问题讨论】:

    标签: winforms events datagridview


    【解决方案1】:

    您可以改用UserDeletedRow 事件。

    【讨论】:

      【解决方案2】:

      这是我们检查以确保数据首先包含行的方式:

      If dataGridView.SelectedRows.Count > 0 Then
      End If
      

      另请参阅:http://msdn.microsoft.com/en-us/library/system.windows.forms.datagridview.userdeletingrow.aspx

      【讨论】:

        【解决方案3】:

        你可以有一个私有的布尔变量来知道你什么时候加载,什么时候不加载。

        private bool IsLoading { get; set; }
        

        在表单加载事件中,你设置变量

        private void MyForm_Load(object sender, EventArgs e)
        {
            this.IsLoading = true;
        // do stuff
            this.IsLoading = false;
        }
        
        private void DataGridView_RowsRemoved(object sender, DataGridViewRowsRemovedEventArgs e)
        {
                    if (this.IsLoading)
                    {
                        return;
                    }
        
           //do stuff
        }
        

        【讨论】:

        • 没有帮助。由于仅将 DataSource 设置为 DataGridView,因此未调用 RowsRemoved(显示在调用堆栈中)。第一次显示对象时,它也会从System.Windows.Forms.dll!System.Windows.Forms.Control.SetVisibleCore(bool value = true) 调用。
        【解决方案4】:

        是否可以在加载网格之前删除事件处理程序,然后重新添加?

        【讨论】:

        • 我一直在尝试这样做,但之后我应该重新添加哪个事件?
        • 您重新添加 RowsRemoved 事件,无论您以何种方式加载网格。像 RemoveHandler grid.RowsRemoved, AddressOf someFunction;加载数据(); AddHandler grid.RowsRemoved, AddressOf someFunction; (对不起,我不知道如何在评论框中编码格式)
        猜你喜欢
        • 1970-01-01
        • 2011-11-23
        • 2015-01-25
        • 2014-05-25
        • 2019-12-04
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-05
        相关资源
        最近更新 更多