我用一个gridview做一个一次性更新其中的一列所有行(是float型)
并采用简单的DAL+BLL来做。
gridview数据例子depart name salary 
aa      aa    11.03
bb      cc    22.14
...zz      zzc    55.01以上salary是模板列,全为textbox1,其它列为只读现小弟的思路是在gridview外面放一个button,命名为更新按钮,作用是点击它会全部更新所有行的salary.
以上depart,name,salary是数据库中某个表table中的某个字段,当然它也有id(自动增值1)主键,并且
我已经将gridview的DataKeyNames指定为id.Button(更新)的代码
    
protected void Button3_Click(object sender, EventArgs e)
    {
        foreach (GridViewRow gvr in GridView1.Rows)
        {
            if (gvr.RowType == DataControlRowType.DataRow)
            {
                Int32 i = Convert.ToInt32(((TextBox)gvr.Cells[10].FindControl("TextBox4")).Text);
                Int32 kh_jj = Convert.ToInt32(((TextBox)gvr.Cells[4].FindControl("TextBox1")).Text);
                BLL b = new BLL();
                b.updateBLL_JJ(i, kh_jj, gzyear, gzmonth, leibie);
            }
        }
    }BLL层:    public void updateBLL_JJ(Int32 i,float kh_jj,string gzyear,string gzmonth,string leibie)
    {
        DAL a = new DAL();
        DataSet ds = a.getDAL_JJ(gzyear,gzmonth,leibie);
        ds.Tables["JiangJianAll"].Rows[i]["kh_jj"] = kh_jj;        a.updateDAL_JJ(ds);
    }DAL层:
    public void updateDAL_JJ(DataSet ds)
    {
        SqlConnection conn = new SqlConnection(connStr);
        conn.Open();
        SqlDataAdapter da = new SqlDataAdapter("select * from JiangJinAll", conn);
        SqlCommandBuilder cb = new SqlCommandBuilder(da);
        da.Update(ds, "JiangJinAll");
        conn.Close();
    }
小弟愚民,有个问题想请教。
1、如何获取到gridview的DataKeyNames(逐行获取)
2、在DAL里update到数据库时,如何让数据库知道update的数据是对应哪个ID?
   (语文学得不好,我的意思是就算我传个主键的ID值过去,但DAL里的update没有 像where id=@id,如何匹配更新)

解决方案 »

  1.   

    没有 像where id=@id,你可以加阿。
      

  2.   

    SqlCommandBuilder cb = new SqlCommandBuilder(da);以上一行虽说会自动生成相应的SQL执行,但dataset里有重复的记录,但ID主键值不一样,执行da.Update时,它会匹配更新吗?还是如何做?
      

  3.   


        protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
        {
            if (e.Row.RowType == DataControlRowType.DataRow)
            {
                
               DataRowView row = (DataRowView)e.Row.DataItem;
               string strID = GridView1.DataKeys[e.Row.RowIndex].Value.ToString();//逐行获取得ID
               Int32 kh_jj = Convert.ToInt32(((TextBox)gvr.Cells[4].FindControl("TextBox1")).Text);
    //這兩個對應的值已經找到,可以new 一個 datetable ,把grid所有id,和對應的salary的值存到里面去
    //把datatable傳進updateBLL_JJ方法里,for循環這個table 根據id修改salary的值
            }
        }
      

  4.   

    更正 Int32 kh_jj = Convert.ToInt32(((TextBox)gvr.Cells[4].FindControl("TextBox1")).Text); 
    應該是 Int32 kh_jj = Convert.ToInt32(((TextBox)e.Row.Cells[4].FindControl("TextBox1")).Text);