在我从其linkcolumns添加已删除或插入的新项目后,DatagridView不会刷新

时间:2015-06-04 06:25:38

标签: c# winforms datagridview

当我执行任何一个操作后,datagridview会更新并反映执行的操作。但是我在第一次操作后无法执行任何操作。就像它进入只读模式或那些链接停止工作一样。很新对datagridviews的任何帮助表示赞赏。

我的代码显示datagridview。

public void DisplayDataGridView()
    {

        Con.Open();
        SqlDataAdapter Da = new SqlDataAdapter("Select * from reg", Con);
        DataTable dt = new DataTable();
        Da.Fill(dt);
        dataGridView1.DataSource = dt;
        Con.Close();
    }

我添加3列的代码插入删除和编辑。

private void Form1_Load(object sender, EventArgs e)
    {
        DisplayDataGridView();

        DataGridViewLinkColumn Editlink = new DataGridViewLinkColumn();
        Editlink.UseColumnTextForLinkValue = true;
        Editlink.HeaderText = "Edit";
        Editlink.LinkBehavior = LinkBehavior.SystemDefault;
        Editlink.Text = "Edit";
        dataGridView1.Columns.Add(Editlink);
     }

最后我删除了代码。

 private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e)
    {
        if (e.ColumnIndex == 6)//delete
        {
            string id = Convert.ToString(dataGridView1.Rows[e.RowIndex].Cells["ID"].Value);
            Con.Open();
            SqlCommand Cmd = new SqlCommand("Delete from reg where ID=" + id + "", Con);

            Cmd.ExecuteNonQuery();
            Con.Close();

            DisplayDataGridView();
            //dataGridView1.Refresh();
        }

我只能执行任何一项操作,然后无法执行任何其他操作。在第一次操作后,数据库中不会反映任何其他操作。

1 个答案:

答案 0 :(得分:0)

您的“删除”代码块将无法执行,因为ColumnIndex的{​​{1}}不再是

每次使用新EditLink更新DataGridView时, 将删除所有生成的列,并生成新列 (如果DataSource - 我认为是在你的情况下)

DataGridView.AutoGenearateColumns = true未被删除,因为EditLink未生成,而是手动添加。 设置新的DataGridView后,DataSource列的ColumnIndex变为0。

要解决方法,请在EditLink事件处理程序

中创建列时使用列名
Load

然后在Editlink.Name = "columnDelete"; 事件处理程序中使用名称

比较索引
CellContentClick

我更喜欢使用列名而不是索引。使用名称,我可以确定即使更改了if (e.ColumnIndex == this.dataGridView1.Columns["columnDelete"].Index) { //delete code }

中列的顺序,也会获得列