none
tabcontrol问题(2) RRS feed

  • 问题

  • 点击按钮分别在两个datagridview中添加新数据并显示更新后的数据表,每次成功后,从一个tab切换到另一个tab都会出现一个问题;数据表是空的.为什么?怎么改呢?谢谢
      private void toolStripButton3_Click(object sender, EventArgs e)
            {
                if (tabControl1.SelectedTab.Text == "导线参数库")
                {
                    //MessageBox.Show("1");
                    openFileDialog1.ShowDialog();
                    string filename = openFileDialog1.FileName;
                    conn = new SqlConnection(connStr);
                    string sqlstr = "insert into linetype select 导线型号, 单位电阻,单位电抗 from OPENROWSET('MICROSOFT.JET.OLEDB.4.0','Excel 8.0;HDR=YES;DATABASE=" + filename + "',sheet1$)";
                    /*这里可以用 * 代替  */
                    conn.Open();
                    cmd = new SqlCommand(sqlstr, conn);
                    cmd.ExecuteNonQuery();
                    conn.Close();

                    //再显示在datagridview中
                    string sql_select = "select * from linetype";
                    myDataSet.Clear();
                    myAdapter = new SqlDataAdapter(sql_select, conn);

                    myAdapter.Fill(myDataSet, "导线型号");
                    dataGridView1.DataSource = myDataSet.Tables["导线型号"].DefaultView;
                    MessageBox.Show("导入数据成功");

                }
                else if (tabControl1.SelectedTab.Text == "变压器参数库")
                {
                    //MessageBox.Show("2");
                    openFileDialog1.ShowDialog();
                    string filename = openFileDialog1.FileName;
                    conn = new SqlConnection(connStr);
                    string sqlstr = "insert into Transtype select 变压器类型,额定容量,额定电压,空载损耗,负载损耗,空载电流,阻抗电压 from OPENROWSET('MICROSOFT.JET.OLEDB.4.0','Excel 8.0;HDR=YES;DATABASE=" + filename + "',sheet1$)";
                    //    /*这里可以用 * 代替  */
                    conn.Open();
                    cmd = new SqlCommand(sqlstr, conn);
                    cmd.ExecuteNonQuery();
                    conn.Close();
                    myDataSet.Clear();
                    //    //再显示在datagridview中
                    string sql_select = "select * from TransType";

                    myAdapter = new SqlDataAdapter(sql_select, conn);

                    myAdapter.Fill(myDataSet, "变压器类型");
                    dataGridView2.DataSource = myDataSet.Tables["变压器类型"].DefaultView;
                    MessageBox.Show("导入数据成功");

                }
            }
        }

    2009年8月9日 12:02

答案

  • 因为你两个 dataGridView 都绑定了 myDataSet 但,你在每次绑定前又执行了 myDataSet.Clear(); 其中的一个数据表当然就是空的了,你分别用两个 dataSet 来分别绑定两个dataGridView 就可以了

    知识改变命运,奋斗成就人生!
    • 已标记为答案 yanbing 2009年8月10日 0:18
    2009年8月9日 16:49
    版主

全部回复

  • 您好,请在TabControlSelected 事件中增加显示代码。
    2009年8月9日 12:05
  • 您好,请在TabControlSelected 事件中增加显示代码。
    什么意思?帮写一下好吗?谢谢!

    2009年8月9日 12:23
  • 您好,请在TabControlSelected 事件中增加显示代码。
    什么意思?帮写一下好吗?谢谢!


    在TabControl中绑定SelectedIndexChanged事件。通过选中Tabcontrol,然后在属性设计视图中来绑定SelectedIndexChanged。
    会生成类似this.tabControl1.SelectedIndexChanged += new System.EventHandler(this.tabControl1_SelectedIndexChanged);和
     private void tabControl1_SelectedIndexChanged(object sender, EventArgs e)
            {
              //在这里添加显示代码

            }

    2009年8月9日 13:02
  • 你好!
         可以在SelectedIndexChanged的事件处理程序中绑定数据!
    周雪峰
    2009年8月9日 15:58
    版主
  • 因为你两个 dataGridView 都绑定了 myDataSet 但,你在每次绑定前又执行了 myDataSet.Clear(); 其中的一个数据表当然就是空的了,你分别用两个 dataSet 来分别绑定两个dataGridView 就可以了

    知识改变命运,奋斗成就人生!
    • 已标记为答案 yanbing 2009年8月10日 0:18
    2009年8月9日 16:49
    版主
  • 谢谢您!解决了
    2009年8月10日 0:18