如何调用 类中的datatable?
  首先建了一个config类,里面声明了一个datatable.
  form2继承自form1.我想在form2的代码里调用,config类中的datatable,并给datatable加上一新行.
怎么做呢?请教各位老师.

解决方案 »

  1.   

    给config类加个属性,通过属性来得到这个dt的引用就可以了public class config
    {
       private DataTable dt=new DateTalbe();
       public DataTable DT//注意是只读的属性,如果要编写可写的,还要加上set
       {
         get{return dt;}
       }
    }
      

  2.   

    楼上正解private DataTable _dt;
    public DataTable DT
    {
        get
        {
            return _dt;
        }
        set
        {
            _dt = value;
        }
    }在form2中config config = new config();
    config.DT.Rows.Add(datarow);这样就可以给Datatable加一行了~
      

  3.   

    添加新行先要调用DataTable的NewRow方法,再将返回的DataRow加进DataTable的Rows中
      

  4.   

    低价转让:中#美#爱#梯#科技.Net软件工程师培训课程内容(共35G),声音清晰,课程完整!
    需要这个培训视频的朋友请联系 QQ 936652114
      

  5.   

    发出源码,请老师帮忙.
    class Config
        {
            public Config(DataGridView  xx)
           {
            yy = xx;
            
           }
           private DataGridView   yy;
           private   DataTable dt = new DataTable();
           public DataTable  DT
               {
                   get { return dt; }
                   set { dt = value; }
               } 
                   
           
           public void LoadFromFile() 
            {
            dt = new DataTable();
            dt.Columns.Add("姓名");
            dt.Columns.Add("性别");
            FileInfo dataFile = new FileInfo("学生.txt");
            FileStream fs = dataFile.OpenRead();
            StreamReader sr = dataFile.OpenText();
            string s = sr.ReadToEnd();
            int location = s.IndexOf("2");       
            sr.BaseStream.Position = location;       
            char[] seperator = new char[] { ' ' };              
            while (!sr.EndOfStream)
                {
                string data = sr.ReadLine();
                string[] sa = data.Trim().Split(seperator, StringSplitOptions.RemoveEmptyEntries);
                DataRow dr = dt.NewRow();            for (int i = 0; i < sa.Length; i++)
                    {
                    dr[i] += sa[i];
                   
                    }
                dt.Rows.Add(dr);            }
            yy.DataSource = dt;       
            sr.Close();
            sr.Dispose(); 
           }      
      }
    在form2的load事件中调用LoadFromFile() 方法,加载数据到form2上的dataGridView1;
    然后,在form2的button1_Click事件中,给上面的那个表dt,添加一新行,
      Config config = new Config(this.dataGridView1 ); //配制类                
                    DataRow xinhang = config.DT.NewRow();
                   
                    xinhang["姓名"] = textBox1.Text;  到这儿就不行了????
                    xinhang["性别"] = textBox2.Text;
                    config.DT.Rows.Add(xinhang);
    可老是编译不过,提示说,列“姓名”不属于表 。并不能把新行加上去.
      不知是为啥,恳请老师们帮忙呀.
      

  6.   

    此时尚未定义列,应该是执行通不过吧,编译检查不出这样的问题的。        dt = new DataTable(); 
            dt.Columns.Add("姓名"); 
            dt.Columns.Add("性别"); 把列的定义放入构造函数中。
      

  7.   

    你是在 LoadFromFile() 中定义的“姓名”、“性别”列!!!!!
      

  8.   

    Quote:
      Config config = new Config(this.dataGridView1 ); //配制类                
                    DataRow xinhang = config.DT.NewRow();
                   
                    xinhang["姓名"] = textBox1.Text;  到这儿就不行了????
                    xinhang["性别"] = textBox2.Text;
                    config.DT.Rows.Add(xinhang); 
    Quote:
    第一行Config config=new Config(this.dataGridView1);  在这里,DT已经变为new DataTable()了。
    所以会出问题。
      

  9.   

    把向表添加列的代码放到构造函数中,这样你建立实例时就已经向表中添加列了
    class Config 
        { 
            public Config(DataGridView  xx) 
           { 
            yy = xx; 
    //==============放到这里
             dt = new DataTable(); 
            dt.Columns.Add("姓名"); 
            dt.Columns.Add("性别");
           } 
           private DataGridView   yy; 
           private   DataTable dt = new DataTable(); 
           public DataTable  DT 
               { 
                   get { return dt; } 
                   set { dt = value; } 
               }  
                    
            
           public void LoadFromFile()  
            { 
    /*
            dt = new DataTable(); 
            dt.Columns.Add("姓名"); 
            dt.Columns.Add("性别"); */
            FileInfo dataFile = new FileInfo("学生.txt"); 
            FileStream fs = dataFile.OpenRead(); 
            StreamReader sr = dataFile.OpenText(); 
            string s = sr.ReadToEnd(); 
            int location = s.IndexOf("2");        
            sr.BaseStream.Position = location;        
            char[] seperator = new char[] { ' ' };               
            while (!sr.EndOfStream) 
                { 
                string data = sr.ReadLine(); 
                string[] sa = data.Trim().Split(seperator, StringSplitOptions.RemoveEmptyEntries); 
                DataRow dr = dt.NewRow();             for (int i = 0; i  < sa.Length; i++) 
                    { 
                    dr[i] += sa[i]; 
                    
                    } 
                dt.Rows.Add(dr);             } 
            yy.DataSource = dt;        
            sr.Close(); 
            sr.Dispose();  
           }       
      } 
      

  10.   

    说得还不够明白吗?这些代码是不是你自己写出来?
    这是你现在的构造函数:        public Config(DataGridView  xx) 
           { 
            yy = xx; 
             
           } 改成:        public Config(DataGridView  xx) 
           { 
            yy = xx; 
            dt = new DataTable(); 
            dt.Columns.Add("姓名"); 
            dt.Columns.Add("性别");          
           } 
      

  11.   

    另外,这一句:       private   DataTable dt = new DataTable(); 改成:       private   DataTable dt; 
    LoadFromFile方法中把开头的三条语句去掉。
      

  12.   

    谢谢各位,经过大家的帮助,改了下代码.还是不行.button1_Click事件中,给上面的那个表dt,添加一新行, 
      Config config = new Config(this.dataGridView1 ); //配制类  
    到这里的时候,还是加不上,除非再调用 LoadFromFile()方法,
    然后,          
                    DataRow xinhang = config.DT.NewRow(); 
                    xinhang["姓名"] = textBox1.Text;                  
                    xinhang["性别"] = textBox2.Text; 
                    config.DT.Rows.Add(xinhang); 
     可是我在form2的load事件中已调用 LoadFromFile()方法,加载过一次了,
     也就是form2上的datagridview中已经有数据了.
     难道说为了加一行数据再重新再调用 LoadFromFile()方法,
      加载一次数据?              
                    DataRow xinhang = config.DT.NewRow(); 
                    
                    xinhang["姓名"] = textBox1.Text;  
                    xinhang["性别"] = textBox2.Text; 
                    config.DT.Rows.Add(xinhang); 郁闷!郁闷!
      

  13.   

    form1上有一 button1和dataGridView1.
    debug文件夹下有个"学生.txt"文件,内容是
    2 李阳男
    3 王菲女
    这是类中的代码:
    namespace _11
        {
        class Config
            {
            public Config(DataGridView xx)
                {
                yy = xx;
               
                dt = new DataTable();
                dt.Columns.Add("姓名");
                dt.Columns.Add("性别");
                }
            private DataGridView yy;
            private DataTable dt ;
            public DataTable DT
                {
                get { return dt; }
                set { dt = value; }
                }
            public void LoadFromFile()
                {
             
                FileInfo dataFile = new FileInfo("学生.txt");
                FileStream fs = dataFile.OpenRead();
                StreamReader sr = dataFile.OpenText();
                string s = sr.ReadToEnd();
                int location = s.IndexOf("2");
                sr.BaseStream.Position = location;
                char[] seperator = new char[] { ' ' };
                while (!sr.EndOfStream)
                    {
                    string data = sr.ReadLine();
                    string[] sa = data.Trim().Split(seperator, StringSplitOptions.RemoveEmptyEntries);
                    DataRow dr = dt.NewRow();                for (int i = 0; i < sa.Length; i++)
                        {
                        dr[i] += sa[i];                    }
                    dt.Rows.Add(dr);                }
                yy.DataSource = dt;
                sr.Close();
                sr.Dispose();
                }
            } 
        }
    这是form1中的代码
    namespace _11
        {
        public partial class Form1 : Form
            {
            public Form1()
                {
                InitializeComponent();
                }
           
            private void button1_Click(object sender, EventArgs e)
                {
                Config config = new Config(this .dataGridView1 );
                 DataTable dt = config.DT;
                
                 DataRow xinhang = dt.NewRow();  //这是要增加的行
                 xinhang["姓名"] = "陈中";  //到这里就通不过了.
                 xinhang["性别"] = "男";
                 dt.Rows.Add(xinhang);
                             }        private void Form1_Load(object sender, EventArgs e)
                {
                Config config = new Config(this.dataGridView1);
               config . LoadFromFile();
                }
            }
        }请老师帮帮.
      

  14.   

    我的目的,新行添加进去后,接在旧表dt后,并且能在dataGridView1中显示在最后一行.
      

  15.   


    namespace _11 
        { 
        public partial class Form1 : Form 
            { 
             Config config;//加这一句
            public Form1() 
                { 
                InitializeComponent(); 
                } 
            
            private void button1_Click(object sender, EventArgs e) 
                { 
                //Config config = new Config(this .dataGridView1 ); //这一句不要了
                 DataTable dt = config.DT; 
                 
                 DataRow xinhang = dt.NewRow();  //这是要增加的行 
                 xinhang["姓名"] = "陈中";  //到这里就通不过了. 
                 xinhang["性别"] = "男"; 
                 dt.Rows.Add(xinhang); 
                              }         private void Form1_Load(object sender, EventArgs e) 
                { 
                config = new Config(this.dataGridView1); //前面的声明去掉
               config . LoadFromFile(); 
                } 
            } 
        }