单击DataGridView列中的LinkLabel时如何停止MessageBox重复

时间:2016-01-07 15:12:45

标签: c# winforms datagridview

1.这是我的表格:

enter image description here

2.单击DataGridView中的LinkLabel时弹出消息:

enter image description here

private void button3_Click(object sender, EventArgs e)
{
    dataGridView1.Columns.Clear();
    con.Open();
    SqlDataAdapter da 
        = new SqlDataAdapter("SELECT casetype, caseno, year from cases where casetype = '"
                             + textBox2.Text + "'", con);
    DataTable dt = new DataTable();
    da.Fill(dt);
    con.Close();

    dataGridView1.DataSource = dt;

    LinkLabel link = new LinkLabel();
    link.Text = "More Information !";
    DataGridViewLinkColumn col2 = new DataGridViewLinkColumn();
    col2.Name = "column2";
    col2.HeaderText = "Information";
    dataGridView1.Columns.Add(col2);
    dataGridView1.CellContentClick += 
        new DataGridViewCellEventHandler(dataGridView1_CellContentClick_1);

    for (int i = 0; i < dt.Rows.Count; i++)
    {
        dataGridView1.Rows[i].Cells[3].Value = link.Text;
    }
}

private void dataGridView1_CellContentClick_1(object sender, DataGridViewCellEventArgs e)
{
    //dataGridView1.Rows[dataGridView1.CurrentRow.Index].Cells[1].Value.ToString()

    con.Open();
    SqlDataAdapter da 
        = new SqlDataAdapter("SELECT * FROM cases WHERE caseno = '" 
                             + dataGridView1.Rows[e.RowIndex].Cells[1].Value.ToString() 
                             + "'", con);
    DataSet ds = new DataSet();
    da.Fill(ds);
    con.Close();

    DateTime current = DateTime.Now;

    for (int i = 0; i < ds.Tables[0].Rows.Count; i++)
    {
        MessageBox.Show("1.Case Type = " 
            + ds.Tables[0].Rows[i]["casetype"].ToString() 
            + "\n\n2.Case No = " + ds.Tables[0].Rows[i]["caseno"].ToString() 
            + "\n\n3.Case Year = " + ds.Tables[0].Rows[i]["year"].ToString() 
            + "\n\n4.Case Name = " + ds.Tables[0].Rows[i]["name"].ToString() 
            + "\n\n5.Type = " + ds.Tables[0].Rows[i]["type"].ToString() 
            + "\n\nTIME :- " + current.ToString() + "", 
            "Message Box", MessageBoxButtons.OK, MessageBoxIcon.Asterisk);
    }
}

现在,每当我在TextBox中提供新的搜索参数并单击button3按钮时,结果将显示在带LinkLabel的DataGridView中。当我单击LinkLabel时弹出一个MessageBox,但当我在TextBox中提供新的搜索参数并根据搜索参数在我的DataGridView中获取新数据时,它的重复次数增加1。 MessageBox的数量随着我搜索的时间而增加。 所以任何人都可以告诉我如何在我通过提供不同的参数或使用我的文本框搜索加载DataGridView后点击LinkLabel时只显示一次MessageBox。

1 个答案:

答案 0 :(得分:0)

您的消息框会多次显示,因为:

  • 您将消息框置于循环中。只调用消息框一次并将其传递给您需要显示的内容。如果要显示多条消息,可以在消息框中将消息放在单独的行中。

  • 每次加载数据时,您都要添加CellContentClick。添加处理程序一次。您可以将分配处理程序的代码移动到表单加载事件。

还要检查点击的单元格是否是您想要的单元格:

private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
{
    //Check if the clicked cell is your link label column (at index =3)
    if(e.ColumnIndex == 3 && e.RowIndex>=0)
    {
        //e.RowIndex is the index of clicked row
        //Use this.dataGridView1.Rows[e.RowIndex] to find the clicked row.
    }
}

要设置链接标签列的文本,您应该操作链接标签列并创建链接标签控件是没用的,例如,如果col2是您的链接标签列:

col2.UseColumnTextForLinkValue = true;
col2.Text="More Information !";