[英]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.