我用的dataset.Tables["select_test"].Rows[i]["columeName"]来访问的
可程序说表中的第一行就已经空了
在填充dataset时,我作了测试,表不为空,但在子窗体使用表时就空了

解决方案 »

  1.   

    DataTable selectTable = new DataTable("select_test");
                DataTable judgeTable = new DataTable("judge_test");
                SqlConnection conn = new SqlConnection(TestSettingValue.connection);
                SqlDataAdapter adapter = new SqlDataAdapter("select * from testSetting", conn);
    conn.Open();
                    adapter.Fill(TestResult.datSet, "testSetting");
                    adapter.SelectCommand = new SqlCommand("select top  " + TestSettingValue.choiceNum + " number,content,keya,keyb,keyc,keyd,answer from select_test ORDER BY NEWID()", conn);
                    adapter.Fill(selectTable);
                    adapter.SelectCommand = new SqlCommand("select top " + TestSettingValue.judgeNum + " number, content, answer from judge_test ORDER BY NEWID()", conn);
                    adapter.Fill(judgeTable);
                    TestResult.datSet.Tables.Add(selectTable);
                    TestResult.datSet.Tables.Add(judgeTable);                
                    if (TestResult.datSet.Tables["select_test"].Rows.Count != TestSettingValue.choiceNum)
                    {
                        MessageBox.Show("数据填充不完整!");
                        return;
                    }
    conn.Close();
    上面这一段是在MdiForm父窗体中执行加载表到datset,正确加载了
    可在调用子窗体时出错
    下面是子窗体加载时判断dataset中表内容时总说表为0
     private void ChoiceForm_Load(object sender, EventArgs e)
            {
                if (TestResult.datSet.Tables["select_test"].Rows.Count == 0)            
                {
                    MessageBox.Show("数据填充不完整!");
                    return;
                }
                this.manage = this.BindingContext[TestResult.datSet, "select_test"];
                this.Check();                       
                table =TestResult.datSet.Tables["select_test"];
                this.CoiceRightAnswer();
                this.DataBindControls();
            }
      

  2.   

    其中dataSet是在另一个类中定义的静态变量
      

  3.   

    例如:public class Form1 : System.Windows.Forms.Form
    {
    ……
    private void InitControlInfo()
    {
        try
    {
    this._mConn.ConnectionString = ConStrr;
    string _sqlstrr = "select * from PsnInfo";
    this._mDa = new SqlDataAdapter(_sqlstrr,this._mConn);
    this._mDa.Fill(dbclass.DS,"PersonInfo");
    _ds = _mDs.Copy();
             }
             catch(SqlException ex)
    {
    MessageBox.Show(ex.Message);
    return false;
    }
    }
    private void button1_Click(object sender, System.EventArgs e)
    {
    Form2 f2 = new Form2();
    f2.Show();
    this.Hide();
    }
    }
    }
    public class dbclass
    {
    public static DataSet DS = new DataSet();
    }
    …………
    public class Form2 : System.Windows.Forms.Form
    {
    …………
    private void Form2_Load(object sender, System.EventArgs e)
    {
        this.dataGrid1.DataSource = dbclass.DS.Tables[0];
    }}
      

  4.   

    呵呵 写错了一点 手写的 没测试try
    {
    this._mConn.ConnectionString = ConStrr;
    string _sqlstrr = "select * from PsnInfo";
    this._mDa = new SqlDataAdapter(_sqlstrr,this._mConn);
    this._mDa.Fill(dbclass.DS,"PersonInfo");
             }
             catch(SqlException ex)
    {
    MessageBox.Show(ex.Message);
    }
      

  5.   

    你看看子窗体调用DS时 
    DS里面的表名称就知道了 呵呵
      

  6.   

    还是不行,我用下面语句遍历表,所有的表都存在,但就是都是空表
     foreach (DataTable dt in TestResult.datSet.Tables)
                    MessageBox.Show(dt.TableName);
    我在别的窗体调用表绑定数据就可以,为什么就在这个窗体不行了,实在郁闷呀
    这种情况太邪门了
    谢谢你了,我再仔细找找原因吧
      

  7.   

    那就要查查别的代码了 因为你的ds是个static 其它地方也可能已经改变了他的值直接在项目中搜索该DS 看看到底是哪里改变了它