我的程序是:        protected System.Web.UI.WebControls.DataGrid myDataGrid;
        private void Page_Load(object sender, System.EventArgs e)
        {
  // 绑定要维护的数据表
            oleDbConnection1.ConnectionString = DataBase.CENTER_CONN;
            oleDbConnection1.Open();
            SqlStr="select * from " + TableName + " order by " + OrderField;
            oleDbDataAdapter1.SelectCommand = new OleDbCommand(SqlStr, oleDbConnection1);
            oleDbDataAdapter1.Fill(dataSet1);            //动态生成DataGrid各列
            int i;
            TemplateColumn myColumn;
            Label myLabel;
            for (i=0; i<dataSet1.Tables[0].Columns.Count; i++)
            {
                myColumn = new TemplateColumn();
                myLabel = new Label();
                myLabel.ID = "lbl" + dataSet1.Tables[0].Columns[i].ColumnName;
                myLabel.Text = "<%# DataBinder.Eval(Container, \"DataItem." + dataSet1.Tables[0].Columns[i].ColumnName + "\")  %>";
                myColumn.HeaderText = FieldNames[i];
                myColumn.ItemTemplate.InstantiateIn(myLabel);
                myDataGrid.Columns.AddAt(i, myColumn);
            }
            if(!this.IsPostBack)
            {
                BindGrid();
            } 
            oleDbConnection1.Close();
        }
编译正确,但是运行时出现错误未将对象引用设置到对象的实例。 
说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。 异常详细信息: System.NullReferenceException: 未将对象引用设置到对象的实例。源错误: 
行 85:                 myLabel.Text = "<%# DataBinder.Eval(Container, \"DataItem." + dataSet1.Tables[0].Columns[i].ColumnName + "\")  %>";
行 86:                 myColumn.HeaderText = FieldNames[i];
行 87:                 myColumn.ItemTemplate.InstantiateIn(myLabel);
行 88:                 //myColumn.DataField = dataSet1.Tables[0].Columns[i].ColumnName;
行 89:                 myDataGrid.Columns.AddAt(i, myColumn);
 
谁能给出运行正确的代码?或者解释一下ItemTemplate.InstantiateIn这个方法究竟该怎么用也行。解决就给分!

解决方案 »

  1.   

    HyperLinkColumn linkcolumn2=new HyperLinkColumn();
    linkcolumn2.DataNavigateUrlField="EvtDateTime";
    linkcolumn2.HeaderText="删除";
    linkcolumn2.Text="删除";
    linkcolumn2.DataNavigateUrlFormatString="exit_pay.aspx?actid={0}";
    linkcolumn2.HeaderStyle.Wrap=false;
    linkcolumn2.ItemStyle.Wrap=false;
    linkcolumn2.Visible=true;
    linkcolumn2.HeaderStyle.HorizontalAlign=HorizontalAlign.Center;
    linkcolumn2.ItemStyle.HorizontalAlign=HorizontalAlign.Center;
    this.DataGrid1.Columns.Add(linkcolumn2);
      

  2.   

    最后再添
     // 绑定要维护的数据表
                oleDbConnection1.ConnectionString = DataBase.CENTER_CONN;
                oleDbConnection1.Open();
                SqlStr="select * from " + TableName + " order by " + OrderField;
                oleDbDataAdapter1.SelectCommand = new OleDbCommand(SqlStr, oleDbConnection1);
                oleDbDataAdapter1.Fill(dataSet1);
      

  3.   

    "<%# DataBinder.Eval(Container, \"DataItem." + dataSet1.Tables[0].Columns[i].ColumnName + "\")  %>"
    这句好象就有问题,你里面的引号好象用乱了。
      

  4.   

    先谢谢blackhero(黑侠客)不过你给出的是添加 HyperLinkColumn 啊我要的是 TemplateColumnDataGrid.Columns.Add 这个方法我也知道但是,怎么样在 TemplateColumn 添加 EditItemTemplate 和 ItemTemplate 里的控件呢?我想知道的是这个啊
      

  5.   

    回:lr2651(戎 The Return Of The King)引号乱不乱那是另外的问题啦...没有那一行错误是一样的是我的 ItemTemplate.InstantiateIn 没用对不知道要怎么用……如果用 DataGrid.Controls.Add 也不知道怎么往模板列的ItemTemplate 或EditItemTemplate 里添加啊
      

  6.   

    http://www.cnblogs.com/lovecherry/archive/2005/03/25/125526.html
    http://www.cnblogs.com/lovecherry/archive/2005/03/26/126102.html
      

  7.   

    for (i=0; i<dataSet1.Tables[0].Columns.Count; i++)
    {
        myColumn = new TemplateColumn();
        myColumn.ItemTemplate =LoadTemplate("newtemplate.ascx");
    }"newtemplate.ascx"中的内容是
    "<%# DataBinder.Eval(Container, "DataItem.xxx" %>
      

  8.   

    HyperLinkColumn 与EditItemTemplate 和ItemTemplate 是一样的TemplateColumn dd=new TemplateColumn();
      

  9.   

    在后代码里创建DataGrid控件http://dotnet.aspx.cc/ShowDetail.aspx?id=B131BF6E-B35B-413C-9DCE-E755242FA795孟子的.
      

  10.   

    LoveCherry(论成败,人生豪迈;大不了,重头再来!^_^) 的链接我正在看lxg13(翔子) 说的似乎挺有意思的,不过不详细,看不大明白啊
      

  11.   

    看了 LoveCherry 给的链接但是我的问题似乎还是没法解决啊因为我是要根据不同的表,自动生成对应的模板列每列有LABEL 和 TEXTBOX控件绑定相应的字段按照链接里给的方法模板列里的ItemTemplate 或 EditItemTemplate需要定义相应的类那岂不是要动态定义类?
      

  12.   

    发现我犯了一个严重错误...-_-在浏览了MSDN以后总算明白了http://msdn.microsoft.com/library/chs/default.asp?url=/library/CHS/vbcon/html/vbtskcreatingtemplatesprogrammaticallyindatagridcontrol.asp下面是我写的类^_^        public class ColumnTemplate : ITemplate 
            { 
                public ListItemType templateType;
                public string templateID;
                public string BindingField;            public void InstantiateIn(Control container)       
                { 
                    switch (templateType)
                    {
                        case ListItemType.Item:
                            Label myLabel = new Label();
                            myLabel.ID = templateID;
                            myLabel.DataBinding += new EventHandler(this.OnDataBinding); 
                            container.Controls.Add(myLabel);
                            break;
                        case ListItemType.EditItem:
                            TextBox myTextBox = new TextBox();
                            myTextBox.ID = templateID;
                            myTextBox.DataBinding += new EventHandler(this.OnDataBinding); 
                            container.Controls.Add(myTextBox);
                            break;
                    }
                }            public void OnDataBinding(object sender, EventArgs e) 
                {
                    Control l = (Control) sender;
                    DataGridItem container = (DataGridItem) l.NamingContainer; 
                    switch (sender.GetType().Name.ToString())
                    {
                        case "Label":
                            ((Label)l).Text = ((DataRowView)container.DataItem)[BindingField].ToString();
                            break;
                        case "TextBox":
                            ((TextBox)l).Text = ((DataRowView)container.DataItem)[BindingField].ToString();
                            break;
                    }
                } 
            }
           
      

  13.   

    ((TextBox)l).Text = ((DataRowView)container.DataItem)[BindingField].ToString();
    我在运行的时候发现这里出错,说是指定的转换无效.