簡體   English   中英

停止SelectedValueChanged事件

[英]Stop SelectedValueChanged event

我只想問一下如何停止代碼中的所選值更改事件。 我同時具有SelectedValueChanged事件和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();
    }

然后是我的SelectedIndexChanged代碼:

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)
        {

        }

    }

加載表單時我的代碼就是你們需要的。

private void FormAdhocReportViewer_Load(object sender, EventArgs e)
    {
        try
        {
            //string sample = "";
            sXMLResult = SQLScript;
            AddGrid(0);
            adhoc.RowID = CurrentUserNameRowID;
            adhoc.FieldGroup = toolStripReportGroup.Text;
            XMLDOC = adhoc.get_sp_Get_Field_Settings();


            if (RowID == "0")
            {
               // XMLDOC = adhoc.get_sp_Get_Field_Settings();
                LoadDataSet(XMLFILTER);
            }
            else
            {
               // XMLDOC = sXMLFieldSettings;
                XMLFieldQuery = XMLFieldQuery.Replace("@", "<").Replace("+", ">").Replace("*", "/");                   
                LoadDataSet(XMLFieldQuery);
            }
            LoadComboField();
        }
        catch { }
    }

LoadComboField用於組合框中的項目,代碼是這樣的

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";
    }

每當代碼DataGridViewRow GridRowLoc2 = this.dgvFilter.CurrentRow; this.dgvFilter.Rows.Remove(GridRowLoc2); DataGridViewRow GridRowLoc2 = this.dgvFilter.CurrentRow; this.dgvFilter.Rows.Remove(GridRowLoc2); 我只是想停止SelectedValueChangedEvent,這很難解釋,因為我的代碼太復雜了。

簡單刪除事件處理程序呢?

做就是了:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM