2017-06-14 59 views
1

我在Windows窗体应用程序中有一个MetroFramework.Controls.MetroGrid。在frmPatientList_Shown中,我调用了一个方法loadPatientList()。绑定dtb到gridview后,我还添加了一个DataGridViewLinkColumn。 单击链接将打开一个新窗体,其中我更新Patient数据,并在formEditPatient.FormClosed上再次调用loadPatientList()方法,这次DataGridViewLinkColumn被添加两次。我怎样才能防止添加链接两次? 这里是我的代码:防止向datagridview添加两列

private void frmPatientList_Shown(object sender, EventArgs e) 
{ 
    loadPatientList(); 
} 
private void loadPatientList() 
{ 
    DataTable dtb = Patient.getPatientList(); 
    bindToGrid(dtb); 
} 
private void bindToGrid(DataTable dtb) 
{ 
    dataGridView1.DataSource = null; 
    using (dtb) 
    { 
     dataGridView1.DataSource = dtb; 
     dataGridView1.AutoGenerateColumns = false; 
     dataGridView1.AllowUserToAddRows = false; 

     dataGridView1.Columns[0].Name = "PatientId"; 
     dataGridView1.Columns[0].HeaderText = "ID"; 
     dataGridView1.Columns[0].DataPropertyName = "PatientId"; 
     // more code here. 
    } 

    DataGridViewLinkColumn EditLink = new DataGridViewLinkColumn(); 
    EditLink.UseColumnTextForLinkValue = true; 
    EditLink.HeaderText = " Edit "; 
    EditLink.DataPropertyName = "lnkColumn"; 
    EditLink.LinkBehavior = LinkBehavior.SystemDefault; 
    EditLink.Text = "Edit"; 
    dataGridView1.Columns.Add(EditLink); 
} 
private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) 
{ 
    if (e.ColumnIndex == 8 && e.RowIndex >= 0) 
    { 
     using (frmEditPatient formEditPatient = new frmEditPatient(id)) 
     { 
      formEditPatient.FormClosed += FormEditPatient_FormClosed; 
      formEditPatient.ShowDialog(); 
     } 
    } 
} 

private void FormEditPatient_FormClosed(object sender, FormClosedEventArgs e) 
{ 
    loadPatientList(); 
} 

任何帮助,将不胜感激。

回答

0

您检查列中存在,

bool hasEditColumn = false; 
     foreach (DataGridViewColumn item in dataGridView1.Columns) 
     { 
      if (item.GetType() == typeof(DataGridViewLinkColumn) && item.HeaderText == "Edit") 
      { 
       hasEditColumn = true; 
       break; 
      } 
     } 
     if (!hasEditColumn) 
     { 
      DataGridViewLinkColumn EditLink = new DataGridViewLinkColumn(); 
      EditLink.UseColumnTextForLinkValue = true; 
      EditLink.HeaderText = "Edit"; 
      EditLink.DataPropertyName = "lnkColumn"; 
      EditLink.LinkBehavior = LinkBehavior.SystemDefault; 
      EditLink.Text = "Edit"; 
      dataGridView1.Columns.Add(EditLink); 
      dataGridView1.Refresh(); 
     } 
0

在frmPatientList_Shown功能,您添加链接

private void frmPatientList_Shown(object sender, EventArgs e) 
{ 
    DataGridViewLinkColumn EditLink = new DataGridViewLinkColumn(); 
    EditLink.UseColumnTextForLinkValue = true; 
    EditLink.HeaderText = " Edit "; 
    EditLink.DataPropertyName = "lnkColumn"; 
    EditLink.LinkBehavior = LinkBehavior.SystemDefault; 
    EditLink.Text = "Edit"; 
    dataGridView1.Columns.Add(EditLink); 

    loadPatientList(); 
} 

在bindToGrid功能你不添加链接

private void bindToGrid(DataTable dtb) 
{ 
    dataGridView1.DataSource = null; 
    using (dtb) 
    { 
     dataGridView1.DataSource = dtb; 
     dataGridView1.AutoGenerateColumns = false; 
     dataGridView1.AllowUserToAddRows = false; 

     dataGridView1.Columns[0].Name = "PatientId"; 
     dataGridView1.Columns[0].HeaderText = "ID"; 
     dataGridView1.Columns[0].DataPropertyName = "PatientId"; 
     // more code here. 
    } 

    //DataGridViewLinkColumn EditLink = new DataGridViewLinkColumn(); 
    //EditLink.UseColumnTextForLinkValue = true; 
    //EditLink.HeaderText = " Edit "; 
    //EditLink.DataPropertyName = "lnkColumn"; 
    //EditLink.LinkBehavior = LinkBehavior.SystemDefault; 
    //EditLink.Text = "Edit"; 
    //dataGridView1.Columns.Add(EditLink); 
} 

我希望这会帮助你。