gridview中所有列均为动态增加, 其中有一列为动态的templateField 我在itemtemplate中动态添加的是checkbox
用于实现全选功能, 但是 现在的问题是 我怎样去取得这些被选定的checkbox? 我的checkbox有和id绑定 主要是想要得到这些id 但是 我没办法取得选定的checkbox 我有试过findcontrol 但是很遗憾 不论我条件怎么写 它根本没办法取得checkbox 不知道大家有什么建议 帮我想想办法 。先谢谢大家了~!
(ps:由于保密,数据库相关表结构信息我根本不知道, 所以 不得已gridview中所有的列必须动态新增)

解决方案 »

  1.   

    for (int i = 0; i < ddlyw.Items.Count; i++)
    {
       RadioButton rb = ddlyw.Items[i].FindControl("quancheng") as RadioButton;
       if (rb.Checked)
      

  2.   

     public class GridViewTextTemplate : System.Web.UI.ITemplate
        {
            private DataControlRowType templateType;
            private string columnName;
            private string cId;
            public GridViewTextTemplate(DataControlRowType type, string colname, string controlId)
            {
                templateType = type;
                columnName = colname;
                cId = controlId;
            }
            public void InstantiateIn(System.Web.UI.Control container)
            {
                switch (templateType)
                {
                    case DataControlRowType.Header:
                        myHeadLiteral.ID = cId;
                        myHeadLiteral.Text = "<B>" + columnName + "</B>";
                        container.Controls.Add(myHeadLiteral);
                        break;
                    case DataControlRowType.DataRow:
                        TextBox myTextBox = new TextBox();
                        myTextBox.ID = cId;
                        myTextBox.DataBinding += new EventHandler(this.TextBoxDataBinding);
                        container.Controls.Add(myTextBox);
                        break;
                    default:
                        break;
                }        }
            private void TextBoxDataBinding(Object sender, EventArgs e)
            {
                TextBox myTextBox = (TextBox)sender;
                GridViewRow row = (GridViewRow)myTextBox.NamingContainer;
                myTextBox.Text = System.Web.UI.DataBinder.Eval(row.DataItem, columnName).ToString();
            }
        }http://topic.csdn.net/u/20090902/15/41efb8d7-6134-465b-84cc-9ac88fb2e0c8.html
      

  3.   


    for (int i = 0; i  < GridView1.Rows.Count; i++)
     {
        checkbox ck = GridView1.Rows[i].FindControl("checkbox的id");
        if (ck.Checked)
            //执行语句
      }
      

  4.   

    你先获得你选定的哪一个行的下标int rowIndex=e.RowIndex;然后取得该空间
    CheckBox ck=GridViewName.rows[rowIndex].findControl("ckName") as CheckBox;
    然后再取值就可以了
    判断一下他的装太
    if(ck[i].checked==checked)
    取值
      

  5.   


    你可能没看懂我的问题, 不过 还是谢谢了·! 我现在不是要添加 而是要将checkbox取出来。
      

  6.   

    这个方法行不通, 因为FindControl需要控件ID 而我的控件由于是动态添加上去的所以系统自动分配ID 我根本没办法知道ID 是多少
    不过,, 还是谢谢。
      

  7.   


    我就是想知道怎么取 因为是全选的内容 所以 根本没办法触法gridview控件的任何事件 而是在gridview外进行edit 所以要取得选定的checkbox
      

  8.   

    后台取界面的checkbox 但是 我循环gridview的Controls时 根本找不到checkbox
      

  9.   

    那你可以写一个方法循环一下GridView中的行 然后判断你选了哪一行啊
    可以这样写啊
    public void GetSelect(){
               foreach (GridViewRow gvr in GridView1)
               {
                CheckBox cb = gvr.FindControl("ckName") as CheckBox;
                if(cb.Checked){
                    //做出相应的操作
                }
            }
    }
      

  10.   


    先谢谢了~! 不过。。要是FindControl方法能用的话我就不用愁了, 关键是FindControl方法需要一个ID 而我的控件是用与二楼差不多的方法写的 在界面是动态新增的 这样的话 所有的checkbox的ID我都根本不知道 又怎么用这个方法呢~! 而且 我也又试过用遍历gridview 但是 遍历结果根本找不到checkbox 我主要是想知道 到底该怎么取到选定的checkbox的ID
      

  11.   

    你能不能那种方法啊 当你动态创建一个控件的时候 你可以指定他的ID啊
    例如
    TextBox text=new TextBox();
    text.ID=""
    这样你不是就可以设定他的ID了吗
      

  12.   

    后台取c#代码
    private static string RetrieveCheckValue(GridView GridViewMain, string RowCheckBoxName, string RowHiddenInputName)
            {
                string a = "";            foreach (GridViewRow GridViewMainItem in GridViewMain.Rows)
                {
                    HtmlInputCheckBox chk = (HtmlInputCheckBox)(GridViewMainItem.FindControl(RowCheckBoxName));
                    HtmlInputHidden hiInput = (HtmlInputHidden)(GridViewMainItem.FindControl(RowHiddenInputName));
                    if (chk.Checked == true)
                    {
                        a += "," + hiInput.Value;
                    }
                }            if (a != "")
                {
                    a = a.Substring(1, a.Length - 1);
                }
                return a;
            }
            //修改
            protected void ImageButton6_Click(object sender, ImageClickEventArgs e)
            {
                if (RetrieveCheckValue(GridView1, "Checkbox1", "Hidden1") != "")
                {
                    string[] xuanze = RetrieveCheckValue(GridView1, "Checkbox1", "Hidden1").Split(',');
                    if (xuanze.Length == 1)
                    {
                        this.HiddenField1.Value = xuanze[0];
                        BindXuanZe(xuanze[0]);//弹出层绑定的信息
                    }
                    else
                    {
                        this.HiddenField1.Value = "0";
                        Jscript.AlertAndRedirect("每次只能修改一条信息!", "FH_BASE.aspx");                }
                }
                else
                {
                    this.HiddenField1.Value = "0";
                }
            }
    试试
      

  13.   

    动态创建 我根本不知道它有多少个 我怎么手动指定ID? 而且。。 我是将该列数据的ID绑定的 之所以要取得checkbox 就是为了得到这些ID 然后编辑
    不过, 还是谢谢。。