public class GridViewTemplate:System.Web.UI.ITemplate
    {        private DataControlRowType templateType; //列类型        private string columnName;               //列名        private string cId;                      //id号        public GridViewTemplate ( 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:                    CheckBox myChkbx = new CheckBox();                    myChkbx.ID = cId;                    myChkbx.Text = "全选";                    container.Controls.Add(myChkbx);                    break;                case DataControlRowType.DataRow:                    CheckBox cb = new CheckBox();                    cb.ID = cId;                    //cb.DataBinding += new EventHandler(this.TextBoxDataBinding);                    container.Controls.Add(cb);                    break;            }
        }    }使用页
private void DynamicGridView(string table, string filed)
        {
            TitleGridView.Columns.Clear();
            TitleGridView.AutoGenerateColumns = false;
            TitleGridView.DataKeyNames = new string[] { "numb" };            TemplateField tf = new TemplateField();
            tf.HeaderTemplate = new GridViewTemplate(DataControlRowType.Header, "全选", "chkAllrow");
            tf.ItemTemplate = new GridViewTemplate(DataControlRowType.DataRow, "", "ccc");
            tf.HeaderStyle.CssClass = "checkColumn";
            TitleGridView.Columns.Add(tf);            HyperLinkField hlf = new HyperLinkField();
            hlf.DataTextField = filed;
            hlf.DataNavigateUrlFields = new string[] { "numb" };
            hlf.HeaderText = "标题";
            hlf.HeaderStyle.CssClass = "headercss";
            hlf.DataNavigateUrlFormatString = "~/ArticleManage/ReadNews.aspx?numb={0}&tableName=" + table;
            hlf.Target = "_blank";
            TitleGridView.Columns.Add(hlf);
            BoundField bfColumn = new BoundField();
            bfColumn.DataField = "print_date";
            bfColumn.HeaderText = "日期";
            bfColumn.DataFormatString = "{0:d}";
            bfColumn.HeaderStyle.CssClass = "printDate";
            TitleGridView.Columns.Add(bfColumn);
        }protected void btnAddQuote_Click(object sender, EventArgs e)
        {for (int i = 0; i < TitleGridView.Rows.Count; i++)
                    {
                        if (TitleGridView.Rows[i].RowType == DataControlRowType.DataRow)
                        {
                            GridViewRow row = TitleGridView.Rows[i];//    refTable,refField,refNumb,refDate|refTable,refField,refNumb,refDate
                            bool isChecked = ((CheckBox)row.Cells[0].FindControl("ccc")).Checked;提示:未将对象引用设置到对象的实例

解决方案 »

  1.   

    没有找到那个  ccc 为。   isChecked  是空的肯定报错。
      

  2.   

    代码太多了,都晕 @_@
    Debug调试下看看哪步出错,再找原因
      

  3.   

    foreach(GridViewRpw gr in  TitleGridView.Rows)
     { 
          CheckBox= (CheckBox)gr.FindControl("ccc");   
    }
    修改看看
      

  4.   

     bool isChecked = ((CheckBox)row.Cells[0].FindControl("ccc")).Checked;你先去掉这句,然后运行在客户端运行结果查看源代码,看看有没有id为CCC的元素,如果没有就是你代码有问题了!
      

  5.   

    tf.ItemTemplate = new GridViewTemplate(DataControlRowType.DataRow, "", "ccc"); 
    那个CCC不是控件名吧?是列的名称吧……
     bool isChecked = ((CheckBox)row.Cells[0].FindControl("ccc")).Checked;
    这里的FindControl的参数是具体控件的名称,用CheckBox的名称不知道我的理解对不对,总之就是找不到名为CCC的控件
      

  6.   

    HTML中最终生成为的checkbox为这样,可是我是在gridview中动态设置TemplateField列中的checkbox的,如何查询该控件呢?
    <input id="TitleGridView_ctl02_ccc" type="checkbox" name="TitleGridView$ctl02$ccc" />
    <input id="TitleGridView_ctl03_ccc" type="checkbox" name="TitleGridView$ctl03$ccc" />