我有一個DGV,其數據源設置爲BindingList。還有一個ContextMenu分配給DGV中的一列。在ContextMenu上設置了一個MenuItem,它在click事件上調用MessageBox。DataGridView與ContextMenu分配給列和MessageBox
一切工作正常,調用方法和帶有YesNo響應的MessageBox做他們所懷疑的事情。
我遇到的問題是,當MessageBox的點擊事件發生時(是或否)它確實是工作並消失。如果第二次調用相同的例程,則它再次執行沒有問題的任務,然後再次出現。如果我點擊是或否,它會消失。如果我第三次調用它,MessageBox再次出現它的工作並再次出現兩次。就好像每次它被稱爲迭代並重新調用自己的次數一樣。每次調用時都會發生這種情況。
BindingList是使用具有嵌套屬性的類構建的,並且存在所有數據元素。
我試過只用一個空白的MessageBox而沒有使用DialogResults而沒有任何改變。我甚至嘗試在ContextMenu點擊事件和DGV的Cell Enter Click事件中使用DGV的RaiseListChangedEvents = false。
我已經通過我的代碼,並且無論具有嵌套屬性的類總是被調用並導致ContextMenu的單擊事件被一次又一次調用......我認爲這是設計,因爲BindingList會當單元格的值被訪問或更改時,總是自動更新。
ContextMenu的列是一個按鈕,是隻讀的。
那麼我該如何在第一次運行之後捕獲MessageBox或者停止自動更新BindingList。我的列表從Web引用中繪製其數據,並通過API提供的方法處理更新。我使用BindingList的唯一原因是因爲DGV不適用於List。
感謝您的幫助或指導。 (第一次發帖,但收集和使用大量的信息從這裏)
下面是一些代碼:
_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; }
}
}