vs2005 
建立一个datatable,增加columns 和 rows,然后填充到datagridview. 问题:用户单击某一列进行排序。 然后用户选择查看其它数据,程序处理如下:
        dtbl.Clear();
        dtbl.Columns.Clear();
       随后增加columns 和rows. 但当增加row是出错:dtbl.Rows.Add(drw); 说实例没定义。
      如果用户不单击某一列进行排序,就不会出错。请问:
    1. 如何解决此错误
    2. 如何让用户不可单击某一列进行排序(datagirdview的AllowUserToOrderColumns已设为false)谢!

解决方案 »

  1.   

    private void btn1_Click(object sender, EventArgs e)
            {
                this.btn1.Enabled = false;
                this.btn4.Enabled = true;
                this.btn5.Enabled = true;            dtbl.Clear();
                dtbl.Columns.Clear();            DataColumn clmn = new DataColumn();
                clmn.ColumnName = "Date";
                clmn.DataType =System.Type.GetType("System.DateTime");
                dtbl.Columns.Add(clmn);
                clmn = new DataColumn();
                clmn.ColumnName = "SNo";
                clmn.DataType = System.Type.GetType("System.Int16");
                dtbl.Columns.Add(clmn);            for (int i = 1; i < 50; i++)
                {
                    clmn = new DataColumn();
                    clmn.ColumnName = i.ToString("00");
                    clmn.DataType = System.Type.GetType("System.Int16");
                    dtbl.Columns.Add(clmn);
                }            DataRow drw;
                int sno;
                DateTime dt;
                for (int i = 0; i < this.isslistrecordcnt; i++)
                {
                    dt = Convert.ToDateTime(this.ds.Tables[0].Rows[i]["issdate"]);
                    sno =Convert.ToInt16(this.ds.Tables[0].Rows[i]["nospe"]);
                    drw = dtbl.NewRow();
                    drw["date"] = dt;
                    drw["SNo"] = sno;
                    drw[ sno.ToString("00")] = 1;
                    dtbl.Rows.Add(drw);
                }            this.filldatagrid(this.dataGridView1, dtbl,22);
            }
      

  2.   

    private void filldatagrid(DataGridView dgview, DataTable _dtbl, int clmnwidth)
            {
                dgview.DataSource = _dtbl;
                dgview.RowHeadersWidth = 20;
                dgview.Columns[0].Width = 75; //date
                dgview.Columns[1].Width = 30; //SNo
                for (int i = 2; i < _dtbl.Columns.Count; i++)
                {
                    dgview.Columns[i].Width = clmnwidth;
                }
            }
      

  3.   

    出错情况如下:
        用户点击btn1(button1)后,数据显示在datagridview1, 用户有可能点击某一列进行排序。
    然后,用户点击btn4(button4),想查看其它数据(btn4的程序段跟btn的程序段几乎相同,只是所建立的columns不同而已),当程序运行到dtbl.Rows.Add(drw);时出错:Object reference not set to an instance of an object谢!