GRIDVIEW第一列是CHECKBOX,
先勾上,那么把这条数据的主键ID和第二列的数据让二维数组保存。
然后取消勾上,那有两个问题我没有解决:
1:怎么比较这条未勾上的数据的主键ID和第二列的值在二维数组里?
2:然后怎么把这条未勾上的数据的主键ID和第二列的数据从二维数组里删除掉?struct Data
    {
        public int id;
        public string name;
    }private void RememberOldValues()
    {
        ArrayList categoryIDList = new ArrayList();
        Data d = new Data();        int index = -1;
        string kkk = "";        foreach (GridViewRow row in GridView1.Rows)
        {
            index = (int)GridView1.DataKeys[row.RowIndex].Value;
            kkk = row.Cells[1].Text;            bool result = ((CheckBox)row.FindControl("CheckBox1")).Checked;            if (Session["CHECKED_ITEMS"] != null)
            {
                categoryIDList = (ArrayList)Session["CHECKED_ITEMS"];
            }            if (result)  //这里表示以选上
            {
                if (!categoryIDList.Contains(index))
                1:怎么比较这条未勾上的数据的主键ID和第二列的值在二维数组里?
                {
                    d.id = index;
                    d.name = kkk;
                    categoryIDList.Add(d);
                }                
            }
            else
            {
                    //d.id = index;
                    //d.name = kkk;
                    //categoryIDList.Remove(index);
                    //categoryIDList.Remove(d.id);
                    //categoryIDList.Remove(d.name);
                    //categoryIDList.Remove(d);
                    2:然后怎么把这条未勾上的数据的主键ID和第二列的数据从二维数组里删除掉?
            }
        }        if (categoryIDList != null && categoryIDList.Count > 0)
        {
            Session["CHECKED_ITEMS"] = categoryIDList;
        }
    }    private void RePopulateValues()
    {
        ArrayList categoryIDList = (ArrayList)Session["CHECKED_ITEMS"];
        if (categoryIDList != null && categoryIDList.Count > 0)
        {
            foreach (GridViewRow row in GridView1.Rows)
            {
                int index = (int)GridView1.DataKeys[row.RowIndex].Value;
                if (categoryIDList.Contains(index))
                {
                    CheckBox myCheckBox = (CheckBox)row.FindControl("CheckBox1");
                    myCheckBox.Checked = true;
                }
            }
        }
    }    protected void ItemCheckBox_CheckedChanged(object sender, EventArgs e)
    {
        RememberOldValues();
        RePopulateValues();
        string selectName = "";
        
        if (Session["CHECKED_ITEMS"] != null && Session["CHECKED_ITEMS"].ToString() != "")
        {
            ArrayList categoryIDList = (ArrayList)Session["CHECKED_ITEMS"];            if (categoryIDList != null && categoryIDList.Count > 0)
            {
                for (int i = 0; i < categoryIDList.Count; i++)
                {
                    Data d = (Data)categoryIDList[i];
                    selectName = selectName + "<a href='#' onclick=del('" + d.name + "') runat='server'>" + d.name + "</a>";
                    Label1.Text = selectName;
                }
            }
            else
            {
                Label1.Text = "";
            }
        }
    }

解决方案 »

  1.   

    既然有一个是主键,那就是不会重复,使用dictionary进行存储将主键和第二列的值分别以key 和value存储。
      

  2.   

    dictionary的移出可以直接按照key进行remove
      

  3.   

    Dictionary<K,V> 保留键值
    查询Dictionary实现删除
      

  4.   

    Dictionary <string, string> Dit= new Dictionary <string, string>(); 
    foreach(string key in Dit.Keys)
    {
      
    }
      

  5.   

                Dictionary<int, string> dic = new Dictionary<int, string>();            if (dic.Keys.Contains<int>(id))
                {
                    //存在
                }            dic.Remove(id);
      

  6.   

    下面这样写错误:
    Dit = (Dictionary)Session["CHECKED_ITEMS"];Error 2 Using the generic type 'System.Collections.Generic.Dictionary<TKey,TValue>' requires '2' type arguments
      

  7.   

    Session["CHECKED_ITEMS"]里面存的什么?
    ArrayList? 你的不是键值对么?
      

  8.   

    GRIDVIEW第一列是CHECKBOX,
    先勾上,那么把这条数据的主键ID和第二列的数据让二维数组保存。
    然后取消勾上,那有两个问题我没有解决:
    1:怎么比较这条未勾上的数据的主键ID和第二列的值在二维数组里?
    2:然后怎么把这条未勾上的数据的主键ID和第二列的数据从二维数组里删除掉?思路:
    先勾上,那么把这条数据的主键ID和第二列的数据存储在Dictionary中(逐条添加 使用 dic.Add(key,value))
    取消勾上,把这条未勾上的数据的主键ID和第二列的数据从二维数组里删除掉(使用 dic.Remove(key) )Dictionary<int, string> dic = new Dictionary<int, string>();
    //....添加 ID 和第二列值 (键值对)
      if (dic.Keys.Contains<int>(id))  //判断是否存在某ID
      {
      //存在
      }  dic.Remove(id);   //删掉某键值对
      

  9.   

    为啥不用List<Entity>来保存临时结果呢?
      

  10.   

    ArrayList list=new ArrayList();
    for(int i=0;i<list.count;i++){
    list.Remove(list[0]);
    }
    也可以用HashTable
      

  11.   

    foreach (GridViewRow row in GridView1.Rows)
            {            
                index = (int)GridView1.DataKeys[row.RowIndex].Value;
                kkk = row.Cells[1].Text;fruit.Add(index, kkk);if (fruit != null && fruit.Count > 0)
            {
                Session["CHECKED_ITEMS"] = fruit;
            }
      

  12.   

    Dictionary<int, string> fruit = new Dictionary<int, string>();
    foreach (GridViewRow row in GridView1.Rows)
      {   
      index = (int)GridView1.DataKeys[row.RowIndex].Value;
      kkk = row.Cells[1].Text;  fruit.Add(index, kkk);
    } //这是不是有个 } 啊?
    if (fruit != null && fruit.Keys.Count > 0)
      {
      Session["CHECKED_ITEMS"] = fruit;
      }