我建立了一个窗体 ,在里面有dataGridView与数据库相连,我又写了一个连接类,主要内容如下:
//向控件dataGridView 中添加数据库中的数据
        public DataTable dataGridViewConn(string strSql, string tableName)
        {
            try
            {
                SqlConnection conn = new SqlConnection();
                conn.ConnectionString = "Data Source = .\\sqlexpress;Initial Catalog =mySchool;Integrated Security=True";
                SqlCommand cmd = new SqlCommand(strSql, conn);
                SqlDataAdapter adapter = new SqlDataAdapter();
                adapter.SelectCommand = cmd;
                conn.Open();
                DataTable table = new DataTable();
                DataSet ds = new DataSet();
                adapter.Fill(ds, tableName);
                conn.Close();
                table = ds.Tables[tableName];
                return table;
            }
            catch (Exception e)
            {
                throw new Exception(e.Message);
            }
            finally
            {
                closeConn();
            }
        }
在实现时的代码 如下:
//用选择的性别 进行筛选 
                    DataTable table = new DataTable();
                    String strSql = "select LoginId as 用户名,StudentName as 姓名,StudentNO as 学号,
                                                  Sex as 性别 from Student where Sex = '" + sex + "'";
                    table = conn.dataGridViewConn(strSql, tableName);
                    dataGridView1.DataSource = table.DefaultView;但是我如果要在DefaultView中直接修改 并按保存按钮 就可以修改,在按钮里这样写就不行了 如下:
                SqlCommandBuilder builder = new SqlCommandBuilder(adapter);
              adapter.Update(ds, "Student");
因为这里用到的adapter是在筛选按钮里的adapter 所以不行=======================================================================================================
以上就是我的问题 ,请朋友们帮忙解决一下,
在这先谢谢了 。

解决方案 »

  1.   

    你既然用了SqlDataAdapter和DataSet为什么还要用SqlCommand呢?多麻烦啊个人一点愚见:
    首先建议讲SqlDataAdater对象写在类成员里,在其他时间中使用DataGridView是再实例化,很方便
    DataSet实例化对象写在类成员中实现筛选
    {
       string sql = "select * from table_name";   //选查询出所有学员信息
       //判断控件中的性别
       switch(cboSex.Text)    //假设使用comboBox控件进行筛选
       {
          case "男":
             sql += "where Sex = '男'";
            break;
          case "女":
             sql += "where Sex = '女'";
            break;
          default:
            break;
       }
        //讲原有数据先进行清空
         dataSet对象.Tables["table_name"].Clear();
        //重新指定SqlDataAdapter查询用SQL语句
         dataAdapter对象.SelectCommand.CommandText = sql;
        //重新填充数据集
         dataAdapter对象.Fill(dataSet对象,"table_name");
       
    }
    还有你说保存修改的问题,代码看着没有问题,你只是把SqlDataAdapter对象写到类成员里
      

  2.   

    我保存修改的时间是在用按钮实现的请问我在按钮里应该怎么写呢?你这句话什么意思
    你只是把SqlDataAdapter对象写到类成员里谢谢解答