当我执行任何一个操作后,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();
}
我只能执行任何一项操作,然后无法执行任何其他操作。在第一次操作后,数据库中不会反映任何其他操作。
答案 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
}