我采用的有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分

解决方案 »

  1.   

    gridview数据源是datatable吧,
    在内存中删除datatable后,重新绑定gridview. 
      

  2.   


    但是  我真的不会删除  .........我都试了  结果还不行 
    特别的  删除时间  是第二个  gridview2的
      

  3.   

    你的意思是在gridview1中选中删除的项在gridview2中显示?
    而不是直接删除数据库中数据?
      

  4.   

    最重要的要明白 不可直接把数据库内容删除掉 即不能影响数据库的值  数据库已经固定不能更改 ???
    =========================================
    可以给表加个 flag字段 0 1 
    查询数据的时候 把flag条件也加进去 实现假删~~
      

  5.   

            DataSet ds = c.data(sql); 
            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.   

    可以给表加个 flag字段 0 1??????
    不明白 该怎么操作嗯 
      

  7.   


    嗯  6楼的我试过 但是  这个 5  要换成  this.gridview2.selectindex
    就是说 点击  gridview2的选择事件  把此行给去除掉 
    别忘了  gridview1也有一个选择事件........
    该怎么写呢?
      

  8.   

    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);
    如何从视图中  删除想要删除的数据
     
      

  9.   

    给您一个建议:为了不删除数据库,可以加气做个标识“Flag”默认的时候为 0,当删除的时候将其设为 1(你自己定)。当显示的时候读取数据库里的标识字段。
      

  10.   


    两个gridview事件是可以分别处理的,在gridview2的选择事件中执行RemoveAt方法就行了,在设计状态下双击gridview2控件就可以处理gridview2选择事件。不过第几行不是this.gridview2.selectindex,因为可能有分页,另外,如果已经删过几行了,可能也不对应了。用主键也许一些也许我理解不对 :)
      

  11.   

    这个我在设计数据库的时候都习惯这样 
    flag 0 正常 1 删除 
    所谓的假删就是更改flag的值
    你查询的时候就加个where条件就是了不过我更看法在内存中删再绑定
    我说的这个只能算是一种偷懒的做法
      

  12.   

    建议你在用ViewState["id"]保存时候格式是这样的|1||2||23||22|,以便于删除不想要的id,即保存时候:
    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() + "|","");
      

  13.   

    用CSS把要“删除”的行隐藏起来嘛
      

  14.   

    public string Id
    {
    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();
            }中实现操作
      

  15.   

     我想把 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");
      

  16.   


     我想把 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");
      

  17.   


    你的这个 的确不错  但是  我要用viewstate["id"]在数据库中查询怎么办呢  用 “||” 不行吧  
    所以 还得用  “, ” 隔开 
      

  18.   


    string temp= ViewState["id"].ToString().Replace("||",",").Replace("|",""); 
    上面这句就是把‘||’替换成‘,’然后把首尾的‘|’去掉保存在temp中,这样下面这句就是可以搜索的了。
    没有问题啊
    string sql="select * from Insurance_Type where ID in ("+ temp+")";
      

  19.   

    嗯  你很棒  想法也很好 真的 问题解决乐  谢谢  但是有个问题
       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/////////
      

  20.   

    解决办法:
    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,而且参数也不一样你的问题应该可以解决了