Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在C中从DataGridView和数据库中删除选定行_C# - Fatal编程技术网

C# 如何在C中从DataGridView和数据库中删除选定行

C# 如何在C中从DataGridView和数据库中删除选定行,c#,C#,这是我从datagridview和database中删除所选行的代码,但当我单击delete按钮时,它会显示此错误 索引超出范围。必须为非负数且小于尺寸 收藏的一部分。参数名称:索引 请帮我看一下代码…用这种方法试试,然后按照以下步骤操作 1.从数据库中删除您的行 2.清除DataGridview的数据源 3.从数据库中选择数据并将其设置为DataGridview 索引超出范围。必须为非负数且小于尺寸 收藏的一部分。参数名称:索引 这意味着您正在访问集合中不存在的位置或索引。 单击“删除”按钮时

这是我从datagridview和database中删除所选行的代码,但当我单击delete按钮时,它会显示此错误

索引超出范围。必须为非负数且小于尺寸 收藏的一部分。参数名称:索引


请帮我看一下代码…

用这种方法试试,然后按照以下步骤操作 1.从数据库中删除您的行 2.清除DataGridview的数据源 3.从数据库中选择数据并将其设置为DataGridview

索引超出范围。必须为非负数且小于尺寸 收藏的一部分。参数名称:索引

这意味着您正在访问集合中不存在的位置或索引。 单击“删除”按钮时,请验证是否选择了任何单元格

private void btnDelete_Click(object sender, EventArgs e)
{

int i;
i = dataGridView1.SelectedCells[0].RowIndex;

OleDbConnection con = new OleDbConnection(constr);  
OleDbCommand delcmd = new OleDbCommand();
if (dataGridView1.Rows.Count > 1 && i != dataGridView1.Rows.Count - 1)
{
      delcmd.CommandText = "DELETE FROM tb1 WHERE ID=" + dataGridView1.SelectedRows[i].Cells[0].Value.ToString() + "";
      con.Open();
      delcmd.Connection = con;
      delcmd.ExecuteNonQuery();
      con.Close();
      dataGridView1.Rows.RemoveAt(dataGridView1.SelectedRows[i].Index);
      MessageBox.Show("Row Deleted");
}

}
手动探索DataGridView以填充并访问数据我的意思是从单元格中提取值,忽略对一次性数据的使用,以及使用字符串连接而不是参数化查询,这是一种直接的方法

我强烈建议您使用数据绑定和参数化查询。 声明实体类型,其实例将显示在DGV中:

将DGV列配置为样本的数据绑定,将DataPropertyName属性分别设置为Id和Name,并设置DGV数据源:

public class MyEntity
{
    public int Id { get; set; }
    public string Name { get; set; }
}

错误在哪里抛出?是否位于i=dataGridView1.SelectedCells[0]?此命令会引发此错误。。。delcmd.CommandText=从tb1中删除,其中ID=+dataGridView1.SelectedRows[i]。单元格[0]。Value.ToString+;你确定吗?因为您刚刚在一分钟前评论说它是i=dataGridView1.SelectedCells[0]行。是的,我确信它在删除命令行上显示错误。我在datagridview中显示的数据如下所示。。。OLEDB数据适配器da=新OLEDB数据适配器从tb1中选择*,con;DataTable dt=新的DataTable;da.Filldt;dataGridView1.DataSource=dt;这是正确的方式吗?我使用了你的代码。这是说我在当前上下文中不存在。你能提供更清晰的图片显示当前上下文消息中不存在的位置吗?注意,如果你使用DataTable作为数据源,我已经读过你的评论,那么DataBoundItem就是DataRow,解决方案更简单,您不需要任何实体类型。只需从DataRow实例获取id值。如果您使用DataAdapter,那么您甚至不需要DataBoundItem。只需从数据表中删除行,并调用DataAdapter.UpdateDataTable.To来改进您的答案,您应该添加一些基本的解释。至少你在代码中改变了什么,最好是你为什么要改变它。
public class MyEntity
{
    public int Id { get; set; }
    public string Name { get; set; }
}
        // your application fills this collection using data from database
        var source = new List<MyEntity>
        {
            new MyEntity { Id = 1, Name = "Apple" },
            new MyEntity { Id = 2, Name = "Orange" },
            new MyEntity { Id = 3, Name = "Plum" },
            new MyEntity { Id = 4, Name = "Peach" },
        };

        dataGridView1.DataSource = new BindingList<MyEntity>(source);
    private void DeleteSelectedItem()
    {
        if (dataGridView1.SelectedRows.Count == 0)
        {
            return;
        }

        var itemToDelete = (MyEntity)dataGridView1.SelectedRows[0].DataBoundItem;

        using (var connection = new OleDbConnection("..."))
        {
            connection.Open();

            using (var command = new OleDbCommand("DELETE FROM tb1 WHERE ID = ?", connection))
            {
                // delete item from database
                command.Parameters.AddWithValue("@Id", itemToDelete.Id);
                command.ExecuteNonQuery();

                // delete item from datasource and update DGV
                var dataSource = (BindingList<MyEntity>)dataGridView1.DataSource;
                dataSource.Remove(itemToDelete);
            }
        }
    }
    private void btn_Click(object sender, EventArgs e)
    {
        foreach (DataGridViewRow item in this.dataGridView1.SelectedRows)
        {
            using (MySqlConnection con = new MySqlConnection(cs))
            {
                MySqlCommand cmd = con.CreateCommand();
                int id =Convert.ToInt32(dataGridView1.SelectedRows[0].Cells[0].Value);
                cmd.CommandText = "Delete from user where id='" + id+ "'";

                dataGridView1.Rows.RemoveAt(this.dataGridView1.SelectedRows[0].Index);
                con.Open();
                cmd.ExecuteNonQuery();

            }

        }
    }