防止向datagridview添加两次列

时间:2017-06-14 20:27:25

标签: c# winforms datagridview

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

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();
 }

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分: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);
}

我希望它会对你有所帮助。

答案 1 :(得分: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();
        }