У меня есть DGV, для которого в качестве источника данных задан BindingList. Существует также ContextMenu, назначенное столбцу в DGV. В ContextMenu установлен элемент MenuItem, который вызывает MessageBox для события click.
Все работает нормально, методы вызываются, а MessageBox с ответами YesNo делает то, к чему они относятся.
Проблема, с которой я столкнулся, заключается в том, что, когда происходит событие щелчка MessageBox (да или нет), оно выполняет свою работу и уходит. Если та же самая процедура вызывается во второй раз, она снова делает свою работу без проблем, а затем появляется снова. Если я нажму Да или Нет, это исчезнет. Если я вызываю его в третий раз, MessageBox появляется снова, выполняет свою работу и появляется дважды. Как будто каждый раз, когда он вызывается, он повторяется и снова вызывает себя столько раз. Это будет происходить при каждом вызове.
BindingList создается с использованием класса с вложенными свойствами, и все элементы данных присутствуют.
Я попытался использовать только пустой MessageBox без DialogResults и без изменений. Я даже пытался использовать RaiseListChangedEvents = false DGV в событии щелчка ContextMenu и в событии Click для ячейки DGV.
Я прошел через мой код и, независимо от того, какой класс с вложенными свойствами всегда вызывается и вызывает событие click ContextMenu, которое вызывается снова и снова ... Я думаю, что это сделано специально, поскольку BindingList всегда будет Автообновление при доступе или изменении значения ячейки.
Столбец ContextMenu является кнопкой и доступен только для чтения.
Итак, как мне перехватить MessageBox после его первого запуска или остановить автоматическое обновление BindingList. Мой список черпает свои данные из веб-ссылки, и я обрабатываю обновления с помощью методов, предоставляемых из API. Единственная причина, по которой я использую BindingList, заключается в том, что DGV не работает только со списком.
Спасибо за любую помощь или руководство. (Первый раз, но собрал и использовал много информации отсюда)
Вот код:
_requestsView.AutoGenerateColumns = false;
_edit.DataPropertyName = "RequestId";
_patient.DataPropertyName = "Patient";
_dateSubmitted.DataPropertyName = "Date";
_completedBy.DataPropertyName = "CompletedBy";
_completedOn.DataPropertyName = "CompletedOn";
_procedure.DataPropertyName = "Procedure";
_stat.DataPropertyName = "Stat";
_viewReport.DataPropertyName = "ViewReport";
_selectedSpecialist.DataPropertyName = "SelectedSpecialist";
_status.DataPropertyName = "Status";
_rate.DataPropertyName = "Rating";
_requestsView.DataSource = _requestsBinding;
// _cancelRequest_Click is ContextMenu MenuItem
void _cancelRequest_Click(object sender, EventArgs e)
{
MessageBox.Show("test");
}
private void _requestsView_CellEnter(object sender, DataGridViewCellEventArgs e)
{
if (_requestsView.CurrentRow != null)
if (_requestsView.CurrentRow.Cells["_viewReport"].Selected)
try
{
var requestNumber = (int)_requestsView.CurrentRow.Cells ["_viewReport"].Value;
var letter = Api.Client.getCompletedLetter(UseSession.SessionId, requestNumber);
var convertedLetter = Convert.FromBase64String(letter);
var requestNumberToString = Convert.ToString(requestNumber);
var tmpfile = System.IO.Path.Combine(System.IO.Path.GetTempPath(), requestNumberToString + @".pdf");
var view = new ViewLetter(requestNumberToString, tmpfile);
File.WriteAllBytes(tmpfile, convertedLetter);
view._pdf.LoadFile(tmpfile);
view._pdf.PerformLayout();
view._pdf.Refresh();
view._pdf.setShowToolbar(true);
view._pdf.setZoom(100);
view.Show();
view.Activate();
}
catch (Exception ee)
{
MessageBox.Show(ee.Message);
}
if (_requestsView.CurrentRow != null)
if (_requestsView.CurrentRow.Cells["_edit"].Selected)
_edit.ContextMenuStrip.Show(Cursor.Position.X, Cursor.Position.Y);
if (_requestsView.CurrentRow != null)
if (_requestsView.CurrentRow.Cells["_rate"].Selected)
_rate.ContextMenuStrip.Show(Cursor.Position.X, Cursor.Position.Y);
}
public class Requests
{
private int _requestId;
private DateTime _date;
private string _patient;
private string _completedBy;
private string _completedOn;
private string _procedure;
private string _stat;
private int _viewReport;
private Specialists _selectedSpecialist;
private string _status;
private int _rating;
public Requests()
{ }
public Requests(string stat)
{
_stat = stat;
}
public int RequestId
{
get { return _requestId; }
set { _requestId = value; }
}
public DateTime Date
{
get { return _date; }
set { _date = value; }
}
public string Patient
{
get { return _patient; }
set { _patient = value; }
}
public string CompletedBy
{
get { return _completedBy; }
set { _completedBy = value; }
}
public string CompletedOn
{
get { return _completedOn; }
set { _completedOn = value; }
}
public string Procedure
{
get { return _procedure; }
set { _procedure = value; }
}
public string Stat
{
get { return _stat; }
set { _stat = value; }
}
public int ViewReport
{
get { return _viewReport; }
set { _viewReport = value; }
}
public Specialists SelectedSpecialist
{
get { return _selectedSpecialist; }
set { _selectedSpecialist = value; }
}
public string Status
{
get { return _status; }
set { _status = value; }
}
public int Rating
{
get { return _rating; }
set { _rating = value; }
}
}