C# 停止SelectedValueChanged事件

C# 停止SelectedValueChanged事件,c#,events,handler,C#,Events,Handler,我只是想问一下如何停止代码中的selected value changed事件。我已经选择了ValueChanged事件和SelectedIndexChanged事件。我使用SelectedIndexChanged事件是因为要在我的gridview中查找任何重复项以便您理解,以下是我的代码 SelectedValueChanged代码: private void cmbField_SelectedValueChanged(object sender, EventArgs e) {

我只是想问一下如何停止代码中的selected value changed事件。我已经选择了ValueChanged事件和SelectedIndexChanged事件。我使用SelectedIndexChanged事件是因为要在我的gridview中查找任何重复项以便您理解,以下是我的代码

SelectedValueChanged代码:

private void cmbField_SelectedValueChanged(object sender, EventArgs e)
    {
        DataGridViewRow GridRowLoc = this.dgvFilter.CurrentRow;
        AddGrid(iRowIdx);
        int iRowCount = this.dgvFilter.RowCount - 1;

        if (this.cmbField.Text != "System.Data.DataRowView")
        {
            this.dgvFilter.Rows[iRowIdx].Cells["ColumnFieldName"].Value = this.cmbField.Text;
            this.dgvFilter.Rows[iRowIdx].Cells["FieldName"].Value = this.cmbField.SelectedValue;

            if (iRowCount <= iRowIdx)
            {
                DataRow drow = dttable.NewRow();
                drow["ColumnNames"] = this.cmbField.Text;
                drow["FieldName"] = this.cmbField.SelectedValue;
                drow["Alias"] = string.Empty;
                drow["DataType"] = string.Empty;
                drow["Outputs"] = false;
                drow["SortType"] = string.Empty;
                drow["SortOrder"] = string.Empty;
                drow["GroupBy"] = string.Empty;
                drow["Filter"] = string.Empty;
                drow["Or1"] = string.Empty;
                drow["Or2"] = string.Empty;
                drow["Or3"] = string.Empty;
                drow["Or4"] = string.Empty;
                drow["Or5"] = string.Empty;
                drow["Or6"] = string.Empty;
                drow["Or7"] = string.Empty;
                drow["Or8"] = string.Empty;
                drow["Or9"] = string.Empty;
                drow["Or10"] = string.Empty;
                dttable.Rows.Add(drow);
            }
            else
            {
                int irow = 0;
                foreach (DataRow dr in dttable.Rows)
                {
                    if (irow == iRowIdx)
                    {
                        dr["ColumnNames"] = this.cmbField.Text;
                        dr["FieldName"] = this.cmbField.SelectedValue;
                    }
                    irow++;
                }
            }

            CheckAlias(iRowIdx, this.cmbField.Text, dgvFilter);
            checkcellvalue(this.cmbField.Text, iRowIdx);
            CheckSorting();
            if (bGroupBySelected == true)
            {
                this.dgvFilter.Rows[iRowIdx].Cells["GroupBy"].Value = "Group By";
            }

            this.dgvFilter.DataSource = dttable;
            dsFilter.AcceptChanges();

            this.cmbField.Visible = false;
        }
        //checkcellvalue(this.cmbField.Text, iRowIdx);
        //MessageBox.Show(arr_Filter[0]);

        CheckoutputEnable();
    }
private void cmbField_SelectedIndexChanged(object sender, EventArgs e)
    {            
        try
        {
            if (dgvFilter.Rows.Count > 1)
            {
                int count = this.dgvFilter.Rows.Count;

                DataRowView oDataRowView = cmbField.SelectedItem as DataRowView;
                string sValue = string.Empty;

                if (oDataRowView != null)
                {
                    sValue = oDataRowView.Row["FieldDescription"] as string;
                }

                for (int j = 0; j < count; j++)
                {
                    sValue = this.cmbField.Text;
                    if ((j + 2) != dgvFilter.Rows.Count)
                    {
                        if ((sValue == this.dgvFilter.Rows[j].Cells["ColumnFieldName"].Value.ToString()))
                        {
                            if (this.dgvFilter.Rows.Count > 2)
                            {
                                MessageBox.Show("Field already in the list");
                                DataGridViewRow GridRowLoc2 = this.dgvFilter.CurrentRow;
                                this.dgvFilter.Rows.Remove(GridRowLoc2);

                                break;
                            }
                        }

                    }

                }
            }
        }

        catch (Exception ex)
        {

        }

    }
每次都是密码 DataGridViewRow GridRowLoc2=this.dgvFilter.CurrentRow; this.dgvFilter.Rows.RemoveGridRowLoc2;
执行SelectedValueChanged执行到的事件。。我只想停止SelectedValueChangedEvent,因为我的代码太复杂,所以很难解释。

简单地删除事件处理程序怎么样

只要做:

if (<whatever>)
{
   this.cmbField.SelectedValueChanged -= cmbField_SelectedValueChanged;
}

如果不需要,为什么不删除SelectedValueChangedEvent?@dbugger无法删除我需要SelectedValueChanged事件来确定组合框中的值。
private void LoadComboField()
    {
       ReadXMLData(XMLDOC, dsCombo);
       dt = dsCombo.Tables[0];
       DataView dv1 = new DataView(dsCombo.Tables[0]);
       this.cmbField.Items.Clear();
       this.cmbField.DataSource = dv1;
       this.cmbField.DisplayMember = "FieldDescription";
       this.cmbField.ValueMember = "FieldName";
    }
if (<whatever>)
{
   this.cmbField.SelectedValueChanged -= cmbField_SelectedValueChanged;
}