我采用的有AJAX 现有有2个gridview
第二个gridview2的数据来自gridview1选择的
下面是gridview1的选择事件
protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
{
ViewState["id"] += this.GridView1.DataKeys[this.GridView1.SelectedIndex].Value.ToString() + ",";
ViewState["id"] = this.ViewState["id"].ToString().Substring(0, this.ViewState["id"].ToString().Length - 1);
string sql = "select * from Insurance_Type where ID in (" + ViewState["id"].ToString() + ")";//再次检索数据库
DataSet ds = c.data(sql);
DataTable dt = (ds == null ? null : ds.Tables[0]);
this.ViewState["dt"] = dt;
ViewState["id"] = ViewState["id"] + ",";
this.GridView2.DataSource = (DataTable)this.ViewState["dt"];//绑定gridview2
this.GridView2.DataBind();
}
但是若选择错误 想删除已经选择项 就可在gridview2选择取消就行 这个事件是gridview2的 带分页 那么 这个事件该怎么写嗯
或者应该怎么来操作呢 ....
最重要的要明白 不可直接把数据库内容删除掉 即不能影响数据库的值 数据库已经固定不能更改
已经问了 几十位高手了 .....但是 本人才疏学浅.未能解决....请那位高手 带我走出迷茫!!!!
100分
第二个gridview2的数据来自gridview1选择的
下面是gridview1的选择事件
protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
{
ViewState["id"] += this.GridView1.DataKeys[this.GridView1.SelectedIndex].Value.ToString() + ",";
ViewState["id"] = this.ViewState["id"].ToString().Substring(0, this.ViewState["id"].ToString().Length - 1);
string sql = "select * from Insurance_Type where ID in (" + ViewState["id"].ToString() + ")";//再次检索数据库
DataSet ds = c.data(sql);
DataTable dt = (ds == null ? null : ds.Tables[0]);
this.ViewState["dt"] = dt;
ViewState["id"] = ViewState["id"] + ",";
this.GridView2.DataSource = (DataTable)this.ViewState["dt"];//绑定gridview2
this.GridView2.DataBind();
}
但是若选择错误 想删除已经选择项 就可在gridview2选择取消就行 这个事件是gridview2的 带分页 那么 这个事件该怎么写嗯
或者应该怎么来操作呢 ....
最重要的要明白 不可直接把数据库内容删除掉 即不能影响数据库的值 数据库已经固定不能更改
已经问了 几十位高手了 .....但是 本人才疏学浅.未能解决....请那位高手 带我走出迷茫!!!!
100分
在内存中删除datatable后,重新绑定gridview.
但是 我真的不会删除 .........我都试了 结果还不行
特别的 删除时间 是第二个 gridview2的
而不是直接删除数据库中数据?
=========================================
可以给表加个 flag字段 0 1
查询数据的时候 把flag条件也加进去 实现假删~~
DataTable dt = (ds == null ? null : ds.Tables[0]); // 这一行是我新加上的,删除表中的第5行数据,不影响原数据库。
dt.Rows.RemoveAt( 5 ); this.ViewState["dt"] = dt;
ViewState["id"] = ViewState["id"] + ",";
this.GridView2.DataSource = (DataTable)this.ViewState["dt"];//绑定gridview2
this.GridView2.DataBind(); // 但愿对你有帮助
不明白 该怎么操作嗯
嗯 6楼的我试过 但是 这个 5 要换成 this.gridview2.selectindex
就是说 点击 gridview2的选择事件 把此行给去除掉
别忘了 gridview1也有一个选择事件........
该怎么写呢?
ViewState["id"] = this.ViewState["id"].ToString().Substring(0, this.ViewState["id"].ToString().Length - 1);
string sql = "select * from Insurance_Type where ID in (" + ViewState["id"].ToString() + ")";
DataSet ds = c.data(sql);
如何从视图中 删除想要删除的数据
两个gridview事件是可以分别处理的,在gridview2的选择事件中执行RemoveAt方法就行了,在设计状态下双击gridview2控件就可以处理gridview2选择事件。不过第几行不是this.gridview2.selectindex,因为可能有分页,另外,如果已经删过几行了,可能也不对应了。用主键也许一些也许我理解不对 :)
flag 0 正常 1 删除
所谓的假删就是更改flag的值
你查询的时候就加个where条件就是了不过我更看法在内存中删再绑定
我说的这个只能算是一种偷懒的做法
ViewState["id"] += "|"+this.GridView1.DataKeys[this.GridView1.SelectedIndex].Value.ToString() + "|";
这样的话,下面这句:
ViewState["id"] = this.ViewState["id"].ToString().Substring(0, this.ViewState["id"].ToString().Length - 1);
要改成==》
string temp = ViewState["id"].ToString().Replace("||",",").Replace("|","");
然后:
string sql = "select * from Insurance_Type where ID in (" + temp + ")";//再次检索数据库 这样就可以再不想要某条数据的时候直接:
ViewState["id"]=ViewState["id"].Replace("|"+this.GridView1.DataKeys[this.GridView1.SelectedIndex].Value.ToString() + "|","");
{
get{ return ViewState["id"].ToString();}
set{ViewState["id"]=value;}
}
id+=this.GridView1.DataKeys[this.GridView1.SelectedIndex].Value.ToString() + ",";
在删除前弹出提示是否删除
或在protected void gv_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
Bindata();
}中实现操作
注:viewstate["id2"] 里面的值都已用 “,” 隔开了
那么 应该怎么写呢 我写糊涂了 请问 各位大侠 ...........下面我的代码 是错误的 ......但是代表了我的思想
string i = this.GridView2.DataKeys[ this.GridView2.SelectedIndex].Value.ToString();//这个是i
for (int k = 0; k <= this.ViewState["id2"].ToString().Length - 1; k++)
{
if( this.ViewState["id2"]==i)
this.ViewState["id2"]=0;
}
ViewState["id2"] = ViewState["id2"].ToString().Replace(i, "0");
我想把 viewstate["id2"]里面 和 i 相同的值 都替换成 0
注:viewstate["id2"] 里面的值都已用 “,” 隔开了
那么 应该怎么写呢 我写糊涂了 请问 各位大侠 ...........下面我的代码 是错误的 ......但是代表了我的思想
string i = this.GridView2.DataKeys[ this.GridView2.SelectedIndex].Value.ToString();//这个是i
for (int k = 0; k <= this.ViewState["id2"].ToString().Length - 1; k++)
{
if( this.ViewState["id2"]==i)
this.ViewState["id2"]=0;
}
ViewState["id2"] = ViewState["id2"].ToString().Replace(i, "0");
你的这个 的确不错 但是 我要用viewstate["id"]在数据库中查询怎么办呢 用 “||” 不行吧
所以 还得用 “, ” 隔开
string temp= ViewState["id"].ToString().Replace("||",",").Replace("|","");
上面这句就是把‘||’替换成‘,’然后把首尾的‘|’去掉保存在temp中,这样下面这句就是可以搜索的了。
没有问题啊
string sql="select * from Insurance_Type where ID in ("+ temp+")";
protected void GridView2_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
this.GridView2.PageIndex = e.NewPageIndex;
bind2();
}
protected void GridView2_SelectedIndexChanged(object sender, EventArgs e)
{
bind2();
}
void bind2()
{
int a = this.GridView2.SelectedIndex;
string b = this.GridView2.DataKeys[this.GridView2.SelectedIndex].Value.ToString();
ViewState["id"] = ViewState["id"].ToString().Replace("|" + this.GridView2.DataKeys[this.GridView2.SelectedIndex].Value.ToString() + "|", "");
string temp = ViewState["id"].ToString().Replace("||", ",").Replace("|", "");
string sql = "select * from Insurance_Type where ID in (" + temp + ")";
DataSet ds = c.data(sql);
this.GridView2.DataSource = ds;
this.GridView2.DataBind();
}
this.GridView2.SelectedIndex 在分页的时候 竟然是 -1
所以报错 不知道问题在哪 ......................请教ing/////////
1.在gridview2中添加事件,见红色部分:
<asp:GridView ID="GridView2" runat="server" AllowPaging="True" OnSelectedIndexChanging="GridView2_SelectedIndexChanging" 2.在后台添加代码:
protected void GridView2_SelectedIndexChanging(object sender, GridViewSelectEventArgs e)
{
int a = e.NewSelectedIndex;//获取索引
string id=GridView2.DataKeys[a].Value);//获取id
}注意是SelectedIndexChanging,而不是SelectedIndexChanged,而且参数也不一样你的问题应该可以解决了