【问题标题】:DataGridView selection changed event and deleting selected rows from databaseDataGridView 选择更改事件并从数据库中删除选定的行
【发布时间】:2012-06-03 10:49:25
【问题描述】:

我的表单上有一个单选按钮、一个网格视图和一个按钮。这是我的datagridview selection_changed 代码示例:

private void DataGridView1_SelectionChanged(object sender, EventArgs e)
{
    if (rdb_Delete.Checked)
    {
        lbl_deleteMsg.Text = DataGridView1.SelectedRows.Count.ToString() 
                + " rows selected.";
    }
 }

我想在用户按下删除按钮时从数据库中删除选定的行并刷新 datagridview。 我的数据库中有一个 Id 列,但我没有在 datagridview 上向用户显示它。

那么通过 sql 查询如何从我的数据库中删除选定的行?这是我的删除按钮点击代码,但它似乎不起作用(因为选择更改事件):

private void btn_Delete_Click(object sender, EventArgs e) 
{       
    if (rdb_Delete.Checked)
    {
        int count = DataGridView1.SelectedRows.Count;
        int length = DataGridView1.RowCount;
        if (!count.Equals(0))
        {
            if (confirm())
            {
                for (int i = 0; i < length; i++)
                {
                    if (DataGridView1.Rows[i].Selected)
                    {
                        //DataGridView1.SelectedRows[i].Selected = false;
                        DataGridView1.Rows.RemoveAt(i);
                        i--;
                    }
                }
            }
        }
    }
}

编辑:在这种情况下,我还找到了一个小答案,可能会对某人有所帮助。 DataGridView 的任何列都可以是 visible = false,因此可以通过以下代码访问它:

int rowID = int.Parse(DataGridView1[0, selectedIndex].Value.ToString());

【问题讨论】:

标签: c# sql winforms visual-studio-2010


【解决方案1】:

试试这个:

private void btn_Delete_Click(object sender, EventArgs e) 
{       
    if (rdb_Delete.Checked)
    {
        foreach (DataGridViewRow row in DataGridView1.SelectedRows)
        {
            //delete record and then remove from grid. 
            // you can use your own query but not necessary to use rowid
            int selectedIndex = row.Index;         

            // gets the RowID from the first column in the grid
            int rowID = int.Parse(DataGridView1[0, selectedIndex].Value.ToString());
            string sql = "DELETE FROM Table1 WHERE RowID = @RowID";

            // your code for deleting it from the database
            // then your code for refreshing the DataGridView

            DataGridView1.Rows.Remove(row);
        }
    }
}

【讨论】:

  • 我试试这个。它几乎可以,但我的 datagridview 上没有 ID 列(我的数据库上有但 dgv 上没有),所以它给了我一个解析错误。有没有其他方法可以从数据库中删除行?
  • 然后您可以根据所有列值创建查询。将每个单元格值传递给查询并删除该特定行。
【解决方案2】:

1.) 您必须使用双向绑定。 2.) 您必须确认更改才能使它们成为非临时性的。

【讨论】:

    【解决方案3】:

    private void button60_Click(object sender, EventArgs e) {

            foreach (DataGridViewRow row in dataGridView7.SelectedRows)
            {
                dd = row.Cells["date"].Value.ToString();
                ms = row.Cells["month"].Value.ToString();
                day = row.Cells["day"].Value.ToString();
                string txt = row.Cells["descrip"].Value.ToString();
                con.Open();
                SqlCommand cmd = new SqlCommand("delete from holidays where date like '" + dd + "%' and descrip like '"+ txt +"'", con);
                SqlCommand cmd1 = new SqlCommand("delete from stholidays where holiday like '" + dd + "%' and holidescrip like '" + txt + "'", con);
                cmd.ExecuteNonQuery();
                cmd1.ExecuteNonQuery();
                con.Close();
                foreach (DataGridViewCell oneCell in dataGridView7.SelectedCells)
                {
    
                    if (oneCell.Selected)
                        dataGridView7.Rows.RemoveAt(oneCell.RowIndex);
    
                }
            }
    

    【讨论】:

      猜你喜欢
      • 2013-08-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-07
      相关资源
      最近更新 更多