在ASP.NET中:
直接在数据库中Delete,然后再绑定一次DataSource
事件:RowDeleteing
在WinFormApp中:
直接在数据库中Delete就可以了,
事件是:UserDeletingRow
直接在数据库中Delete,然后再绑定一次DataSource
事件:RowDeleteing
在WinFormApp中:
直接在数据库中Delete就可以了,
事件是:UserDeletingRow
解决方案 »
- 求一款混淆器,不仅能重命名Type Definitions,还能重命名Type References
- MultiByteToWideChar如何使用
- 用飞信的VMDotNet怎么找不到数据库了?
- 画图出现的问题
- 问个关于线程的 问题 顶者有分
- 在ASP.NET下如何发送邮件,要怎么去配置SMTP呢?
- 每个人都有分!C#中如何生成一个UUID或GUID。 急!急!
- 初级问题~求解
- 请问怎样提高C#水平?
- C#种调用事务
- 关于Sybase SQL Anywhere 10 MobiLink安全通道
- 错误 1 找不到类型或命名空间名称“button”(是否缺少 using 指令或程序集引用?) C:\Documents and Settings\Administrator\My Documents\Visual Studio 2008\Projects
private void btn_delete_Click(object sender, EventArgs e)
{
DataSet ds1 = new DataSet();
DataRow dr = ds.Tables[0].Rows[this.userGv.CurrentRow.Index]; //选中的行
string ss ="select count(id) as ww from u_menu where id = " + dr["id"];//选中这行的某个值(id为例子)
SqlCommand cmd = new SqlCommand(ss, con);
SqlDataAdapter sda1 = new SqlDataAdapter(cmd);
sda1.Fill(ds1);
if (MessageBox.Show("确定要删除所选中的记录吗?", "删除", MessageBoxButtons.YesNo) == DialogResult.Yes)
{
ds.Tables[0].Rows[this.userGv.CurrentRow.Index].Delete();
sda.Update(ds.Tables[0]);
}
}
protected void btnDel_Click(object sender, CommandEventArgs e)
{
string connecion1 = System.Configuration.ConfigurationManager.AppSettings["ConnectionString"].ToString();
SqlConnection conn1 = new SqlConnection(connecion1);
SqlCommand cmd1 = conn1.CreateCommand();
cmd1.CommandText = "delete from studentinfo where studentnumber=@studentnumber";
cmd1.CommandType = CommandType.Text; cmd1.Parameters.Add("@studentnumber", SqlDbType.NVarChar, 20);
cmd1.Parameters["@studentnumber"].Value =e.CommandArgument.ToString();
try
{
conn1.Open();
int result = cmd1.ExecuteNonQuery();
if (result == 1)
{
Response.Redirect("Access.aspx");
}
else
{
Response.Redirect("Fail.aspx");
} conn1.Close(); }
finally
{
if (conn1 != null)
conn1.Dispose();
}
DataBind();
}
前台在Columns里加入这
<asp:TemplateField HeaderText="删除" >
<ItemTemplate>
<asp:LinkButton ID="btnDel" runat="server" CommandArgument='<%# Eval("报名编号") %>' OnCommand="btnDel_Click" Text="刪除" OnClientClick="return confirm('确认要刪除此行信息吗?')" />
</ItemTemplate>
<HeaderStyle Font-Size="12px" />
<ItemStyle Font-Size="12px" />
</asp:TemplateField>
删除焦点所在行
this.grdLetterManage.DataSource = bindingSource;2.发现在如果用bindingNavigatorDeleteItem_Click等事件,这些事件只要被触发,其中的一行就会被删除。所以如果再用this.bindingSource.RemoveCurrent();
this.bindingSource.EndEdit();就会再次删除一行。所以这里面就没有办法弹出MessageBox来询问是否要真的删除。
我的做法是:在鼠标按下时处理private void bindingNavigatorDeleteItem_MouseDown(object sender, MouseEventArgs e)
...{
if (this.grdLetterManage.CurrentCell != null)
...{
System.Int32 intRowIndex = this.grdLetterManage.CurrentCell.RowIndex; if (DialogResult.Yes == MessageBox(...)
...{
//.....删除数据库中的话在这里处理
this.bindingSource.RemoveCurrent();
this.bindingSource.EndEdit();
}
else
...{
//这是关键,不删除的话直接结束编辑
this.bindingSourceLetter.EndEdit();
}
}
}
当然,这只是DataGridView表面的删除,数据库中的未被删除,要删除的话我是自己处理的。
{
if(MessageBox.Show("确定要删除!","提示",MessageBoxButtons.OKCancel,MessageBoxIcon.Information)==DialogResult.OK)
{
getsqlcmd("delete tb_Grade where GradeID ='"+Convert.ToString(dgvGrade[0,dgvGrade.CurrentCell.RowIndex].Value).Trim()+"'");//调用下面getsqlcmd(string str_sqlstr)函数
MessageBox.Show("删除成功","提示",MessageBoxButtons.OK,MessageBoxIcon.Information);
Grade_Load(sender,e);//刷新窗体
}
}
public void getsqlcmd(string str_sqlstr)
{
SqlConnection sqlcon = this.getcon();//调用下面getcon()函数连接数据库
sqlcon.Open();
SqlCommand sqlcmd = new SqlCommand(str_sqlstr,sqlcon);
sqlcmd.ExecuteNonQuery();
sqlcmd.Dispose();//释放资源
sqlcon.Close();//关闭数据库连接
sqlcon.Dispose();//释放资源 } public SqlConnection getcon()
{
string str_sql = @"Data Source=.\SQLEXPRESS;Uid=sa;Pwd=xiaosu185996799;Integrated Security=False;Pooling=False;Database=BeautyInfo";
SqlConnection conn = new SqlConnection(str_sql);
return conn;
}
this.dataGridView1.Rows.Remove(this.dataGridView1.SelectedRows[0]); // 去掉选中的第一行(2)如果你的DataGridView是绑定到DataTable的,上面的方法就没有用了,你可通过去掉DataTable的行来完成
假设你的DataTable中有一个叫 ID(int) 的列来标识一行 假定 this.dataGridView1.DataSource = this.dataTable1
DataGridViewRow dgvr = this.dataGridView1.SelectedRows[0]; // get选中的行
int id = Convert.ToInt32(dgvr.Cells["ID"].Value); // get行标识,Cells["ID"] 中的ID如果
//AutoGenerateColunm = false,由你写的 PropertyName来决定
this.dataTable1.Rows.Remove(this.dataTable1.Select(string.Format("ID = '{0}'",id))[0]);这是个人的做法,写得不好不要骂
一般使用datagridview会和bindingnavigator一起使用。通常的想法会是:数据源和datagridview以及bindingnavigator绑定,对数据的操作就使用bindingnavigator的那些按钮。最好不用写代码。因为简单的添加删除保存操作,我们会指望bindingnavigator会帮我们处理掉。
可惜,vs2005的这两样东西并不能让人省心。那个bindingnavigator基本是个摆设。这个问题在网上不乏100分求解的情况就说明上面所说不虚。有高人给了这样的回复:
dataGridView1.Rows.RemoveAt(dataGridView1.CurrentRow.Index);
--------------
这样只是删除的view,即内存数据,这样的修改 没有更新到数据库 用的是dataAdapter 就用update更新下数据库就可以了 ---------------------------------------------------
请高人能写得详细些吗,是用dataAdapter.Update()?那么怎么写()中的呢?
----------------------------
后面高人就没有下文了。实际上,我认为在创建datasource的时候,应该选择产生相应的update和delete语句。在拖进datagridview以及bindingnavigator的时候,绑定好,在它们的相应的删除事件中指定好delete的sql就可以了。
我正在试验。