如何删除选定的DataGridViewRow并更新连接的数据库表?
我有一个Windows窗体应用程序(用C#编写)的DataGridView
控件。
我需要的是:当用户select一个DataGridViewRow,然后点击一个“删除”button,该行应该被删除,接下来,数据库需要更新使用表适配器。
这是我迄今为止:
private void btnDelete_Click(object sender, EventArgs e) { if (this.dataGridView1.SelectedRows.Count > 0) { dataGridView1.Rows.RemoveAt(this.dataGridView1.SelectedRows[0].Index); } }
而且,这只会删除一行。 我想在哪里用户可以select多行。
此代码删除dataGridView1
选定项目:
private void btnDelete_Click(object sender, EventArgs e) { foreach (DataGridViewRow item in this.dataGridView1.SelectedRows) { dataGridView1.Rows.RemoveAt(item.Index); } }
private void buttonRemove_Click(object sender, EventArgs e) { foreach (DataGridViewCell oneCell in dataGridView1.SelectedCells) { if (oneCell.Selected) dataGridView1.Rows.RemoveAt(oneCell.RowIndex); } }
删除索引在选定单元格中的行。 所以,select任何单元格,其相应的行将被删除。
我写了下面的代码,请看看:
foreach (DataGridViewRow row in dataGridView1.SelectedRows) if (!row.IsNewRow) dataGridView1.Rows.Remove(row);
使用所选行的Index
仍然可以工作; 看看下面的代码是否可以做到这一点:
int selectedCount = dataGridView1.SelectedRows.Count; while (selectedCount > 0) { if (!dataGridView1.SelectedRows[0].IsNewRow) dataGridView1.Rows.RemoveAt(dataGridView1.SelectedRows[0].Index); selectedCount--; }
我希望这有助于,问候。
private void btnDelete_Click(object sender, EventArgs e) { if (e.ColumIndex == 10)// 10th column the button { dataGridView1.Rows.Remove(dataGridView1.Rows[e.RowIndex]); } }
这个解决scheme可以通过“e”参数删除一行(没有被选中,点击行!)。
要删除datagrid中的多行,c#
我的部分代码:
private void btnDelete_Click(object sender, EventArgs e) { foreach (DataGridViewRow row in datagrid1.SelectedRows) { //get key int rowId = Convert.ToInt32(row.Cells[0].Value); //avoid updating the last empty row in datagrid if (rowId > 0) { //delete aController.Delete(rowId); //refresh datagrid datagrid1.Rows.RemoveAt(row.Index); } } } public void Delete(int rowId) { var toBeDeleted = db.table1.First(c => c.Id == rowId); db.table1.DeleteObject(toBeDeleted); db.SaveChanges(); }
尝试这个:
if (dgv.SelectedRows.Count>0) { dgv.Rows.RemoveAt(dgv.CurrentRow.Index); }
private: System::Void button9_Click(System::Object^ sender, System::EventArgs^ e) { String^ constring = L"datasource=localhost;port=3306;username=root;password=password"; MySqlConnection^ conDataBase = gcnew MySqlConnection(constring); conDataBase->Open(); try { if (MessageBox::Show("Sure you wanna delete?", "Warning", MessageBoxButtons::YesNo) == System::Windows::Forms::DialogResult::Yes) { for each(DataGridViewCell^ oneCell in dataGridView1->SelectedCells) { if (oneCell->Selected) { dataGridView1->Rows->RemoveAt(oneCell->RowIndex); MySqlCommand^ cmdDataBase1 = gcnew MySqlCommand("Delete from Dinslaken_DB.Configuration where Memory='ORG 6400H'"); cmdDataBase1->ExecuteNonQuery(); //sda->Update(dbdataset); } } } } catch (Exception^ex) { MessageBox::Show(ex->ToString()); } }
那么,这是我通常如何从DataGridView
删除用户检查的行,如果您将它与数据DataGridView1.DataSource = Dataset1.Tables["x"]
的DataTable关联(例如: DataGridView1.DataSource = Dataset1.Tables["x"]
),那么一旦您将Dataset
集中的任何更新(删除,插入,更新),都会自动发生在您的DataGridView
。
if (MessageBox.Show("Are you sure you want to delete this record(s)", "confirmation", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == System.Windows.Forms.DialogResult.Yes) { try { for (int i = dgv_Championnat.RowCount -1; i > -1; i--) { if (Convert.ToBoolean(dgv_Championnat.Rows[i].Cells[0].Value) == true) { Program.set.Tables["Champ"].Rows[i].Delete(); } } Program.command = new SqlCommandBuilder(Program.AdapterChampionnat); if (Program.AdapterChampionnat.Update(Program.TableChampionnat) > 0) { MessageBox.Show("Well Deleted"); } } catch (SqlException ex) { MessageBox.Show(ex.Message); } }
看看这样:
if (MessageBox.Show("Sure you wanna delete?", "Warning", MessageBoxButtons.YesNo) == System.Windows.Forms.DialogResult.Yes) { foreach (DataGridViewRow item in this.dataGridView1.SelectedRows) { bindingSource1.RemoveAt(item.Index); } adapter.Update(ds); }
if(this.dgvpurchase.Rows.Count>1) { if(this.dgvpurchase.CurrentRow.Index<this.dgvpurchase.Rows.Count) { this.txtname.Text = this.dgvpurchase.CurrentRow.Cells[1].Value.ToString(); this.txttype.Text = this.dgvpurchase.CurrentRow.Cells[2].Value.ToString(); this.cbxcode.Text = this.dgvpurchase.CurrentRow.Cells[3].Value.ToString(); this.cbxcompany.Text = this.dgvpurchase.CurrentRow.Cells[4].Value.ToString(); this.dtppurchase.Value = Convert.ToDateTime(this.dgvpurchase.CurrentRow.Cells[5].Value); this.txtprice.Text = this.dgvpurchase.CurrentRow.Cells[6].Value.ToString(); this.txtqty.Text = this.dgvpurchase.CurrentRow.Cells[7].Value.ToString(); this.txttotal.Text = this.dgvpurchase.CurrentRow.Cells[8].Value.ToString(); this.dgvpurchase.Rows.RemoveAt(this.dgvpurchase.CurrentRow.Index); refreshid(); } }
for (int j = dataGridView1.Rows.Count; j > 0 ; j--) { if (dataGridView1.Rows[j-1].Selected) dataGridView1.Rows.RemoveAt(j-1); }
这里是一个非常简单的例子:
ASPX:
<asp:GridView ID="gvTest" runat="server" SelectedRowStyle-BackColor="#996633" SelectedRowStyle-ForeColor="Fuchsia"> <Columns> <asp:CommandField ShowSelectButton="True" /> <asp:TemplateField> <ItemTemplate> <%# Container.DataItemIndex + 1 %> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> <asp:Button ID="btnUpdate" runat="server" Text="Update" OnClick="btnUpdateClick"/>
代码背后:
public partial class _Default : System.Web.UI.Page { private readonly DataTable _dataTable; public _Default() { _dataTable = new DataTable(); _dataTable.Columns.Add("Serial", typeof (int)); _dataTable.Columns.Add("Data", typeof (string)); for (var i = 0; ++i <= 15;) _dataTable.Rows.Add(new object[] {i, "This is row " + i}); } protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) BindData(); } private void BindData() { gvTest.DataSource = _dataTable; gvTest.DataBind(); } protected void btnUpdateClick(object sender, EventArgs e) { if (gvTest.SelectedIndex < 0) return; var r = gvTest.SelectedRow; var i = r.DataItemIndex; //you can get primary key or anyother column vlaue by //accessing r.Cells collection, but for this simple case //we will use index of selected row in database. _dataTable.Rows.RemoveAt(i); //rebind with data BindData(); //clear selection from grid gvTest.SelectedIndex = -1; } }
您将不得不使用checkbox或其他一些机制来允许用户select多行,然后可以通过选中checkbox来浏览行,然后删除这些行。