如何从datagridview c#中删除数据?

如何从datagridview c#中删除数据?,c#,winforms,datagridview,local-database,C#,Winforms,Datagridview,Local Database,当我使用下面的代码时,它确实会从datagridview中删除一行,但当我刷新页面时,它不会 private void DeleteData_Click(object sender, EventArgs e) { foreach (DataGridViewRow row in dataGridView1.Rows) { if (row.Selected) { data

当我使用下面的代码时,它确实会从datagridview中删除一行,但当我刷新页面时,它不会

    private void DeleteData_Click(object sender, EventArgs e)
    {

        foreach (DataGridViewRow row in dataGridView1.Rows)
        {
            if (row.Selected)
            {
                dataGridView1.Rows.RemoveAt(row.Index);
                break; 
        }
        using (SqlConnection sqcon = new SqlConnection(@"MY CONNECTION STRING")) 
        {
            SqlCommand Scmd = new SqlCommand();

            for (int i = 0; i < dataGridView1.Rows.Count; i++)
            {
                DataGridViewRow delrow = dataGridView1.Rows[i];
                if (delrow.Selected == true)
                {
                    dataGridView1.Rows.RemoveAt(i);
                    try
                    {
                        Scmd.CommandText = "DELETE FROM Technican WHERE ID=" + (i++) + "";
                        sqcon.Open(); //ADDED
                        int count = Scmd.ExecuteNonQuery();
                    }
                    catch (Exception ex)
                    {
                        MessageBox.Show(ex.ToString());
                    }
                }
            }
        }

    }
private void delete data_单击(对象发送方,事件参数e)
{
foreach(dataGridView1.Rows中的DataGridViewRow行)
{
如果(选定行)
{
dataGridView1.Rows.RemoveAt(row.Index);
打破
}
使用(SqlConnection sqcon=newsqlconnection(@“我的连接字符串”))
{
SqlCommand Scmd=新的SqlCommand();
对于(int i=0;i
我应该使用什么从本地数据库和datagridview中删除行?

试试这个, 使用“唯一”列或“Id”列从数据库中删除

//Make datagridview cell[0] the unique column in your table.
try
{
    Scmd.CommandText = "DELETE FROM Technican WHERE ID='" + datagridview.rows[i].cell[0].value + "'";
    sqcon.Open(); //ADDED
    int count = Scmd.ExecuteNonQuery();
}
catch (Exception ex)
{
    MessageBox.Show(ex.ToString());
}

我认为不能将连接指定给命令对象

SqlCommand Scmd = new SqlCommand();
Scmd.Connection = sqcon;
此外,我更喜欢使用DataGridView.SelectedRows,而不是在网格中循环所有记录

完整代码

    private void DeleteData_Click(object sender, EventArgs e)
    {
        var rowsToDelete = dataGridView1.SelectedRows;
        using (SqlConnection sqcon = new SqlConnection(@"MY CONNECTION STRING"))
        {
            SqlCommand Scmd = new SqlCommand();
            Scmd.Connection = sqcon;
            sqcon.Open(); //ADDED   
            foreach (DataGridViewRow row in rowsToDelete)
            {
                try
                {
                    Scmd.CommandText = "DELETE FROM Technican WHERE ID=" + row.Cells["Id"].Value.ToString() + "";
                    int count = Scmd.ExecuteNonQuery();

                    dataGridView1.Rows.Remove(row);
                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.ToString());
                }

            }
            sqcon.Close();
        }
    }

根据您将DataGridView绑定到数据源的方式,解决方案可能会有所不同。简单的逻辑是从数据库中删除数据并将DataGridView重新绑定到数据源。看起来DGV没有数据绑定?因此您需要调试sql;名称真的是一个数字吗?计数得到了什么?为什么隐藏异常???永远不要这样做那!在catch中添加一个Console.WrtieLine(例如Message)或类似的名字!!!谢谢,现在我意识到我的名字不是我的错。如何从“名字”开始计数BCI的DATAIT没有数字ID?对于我的合适的C代码有什么建议吗?@ BLCRASP如果你的数据库中每个表中没有一个身份栏,也许你应该考虑你的DB上的重新设计。如果他们有一个身份栏,改变你的查询,以便它包含行的ID,显示给我们的结果SQL!你收到消息了吗?你真的不需要数字ID,但你需要一个唯一的键列。-为什么哦,为什么我要问这些问题?为什么不给我们提供一个关于当前事态的有用描述?仍然不工作根本没有用!!