现在的处理时
1.对gridview绑定数据 private Boolean getMaterialDetailInfo()
        {            Boolean rtn = false;
            String sql = "Select DetailNo,MaterialName,MaterialStandards," +
                " MaterialMeasurement,MaterialQuantity,MaterialUnitPrice,MaterialAmount,MaterialRes " +
                " from tb_MaterialOrderDetail where OrderDate = '" + OrderDate + "' and OrderID='" + txtID.Text + "' " +
                " Order by DetailNo ";
            if (sqlConn.State == ConnectionState.Closed)
            {
                sqlConn.Open();
            }
            sqlAdapter = new OleDbDataAdapter(sql, sqlConn);            sqldataSet = new DataSet();
            sqlAdapter.Fill(sqldataSet);
            DataTable SourceDT = new DataTable();
            SourceDT = sqldataSet.Tables[0];
            DataTable TargetDT = new DataTable();
            TargetDT.Columns.Add("行号");
            TargetDT.Columns.Add("材料名称");
            TargetDT.Columns.Add("规格");
            TargetDT.Columns.Add("单位");
            TargetDT.Columns.Add("数量");
            TargetDT.Columns.Add("单价(元)");
            TargetDT.Columns.Add("金额(元)");
            TargetDT.Columns.Add("备注");
            //todo? no format
            initGrid();
            String MaterialQuantity = "";
            String MaterialUnitPrice = "";
            for (int i = 0; i < SourceDT.Rows.Count; i++)
            {
                DataRow dr = TargetDT.NewRow();
                dr[0] = SourceDT.Rows[i][0].ToString();//行号DetailNo
                dr[1] = SourceDT.Rows[i][1].ToString();//材料名称MaterialName
                dr[2] = SourceDT.Rows[i][2].ToString();//规格MaterialStandards
                dr[3] = SourceDT.Rows[i][3].ToString();//单位MaterialMeasurement
                MaterialQuantity = SourceDT.Rows[i][4].ToString();//数量MaterialQuantity
                MaterialUnitPrice = SourceDT.Rows[i][5].ToString();
                dr[4] = MaterialQuantity;//数量MaterialQuantity
                dr[5] = MaterialUnitPrice;//单价MaterialUnitPrice
                if (MaterialQuantity != "" && MaterialUnitPrice != "")
                {
                    dr[6] = Convert.ToDouble(MaterialQuantity) * Convert.ToDouble(MaterialUnitPrice);//金额MaterialAmount=MaterialQuantity*MaterialUnitPrice
                }
                else
                {
                    dr[6] = "";
                }
                dr[7] = SourceDT.Rows[i][7].ToString();//备注
                TargetDT.Rows.Add(dr);
                rtn = true;
            }
            dgMaterialOrderI.DataSource = TargetDT;
            return rtn;
        }
2)删除一行int delRowIndex = dgv.CurrentRow.Index;
dgv.Rows.RemoveAt(delRowIndex);发现只是看起来删除了!
当追加的场合发现datagridview中的内容还是dgMaterialOrderI.DataSource = TargetDT中的内容!!            for (int i = 0; i < dgMaterialOrderI.Rows.Count - 1; i++)
            {
                String sql = " insert into tb_MaterialOrderDetail(SignOrderDate,SignOrderID,OrderID,OrderDate,DetailNo," +
                      "MaterialName,MaterialStandards,MaterialMeasurement,MaterialQuantity,MaterialUnitPrice,MaterialAmount,MaterialRes) values('" +
                          SignOrderDate + "','" + lblSignOrder.Text.Substring(8, 3) + "','" +
                          txtID.Text + "','" + OrderDate + "','" + i + "','" +
                          dgMaterialOrderI.Rows[i].Cells[1].Value + "','" +
                          dgMaterialOrderI.Rows[i].Cells[2].Value + "','" +
                          dgMaterialOrderI.Rows[i].Cells[3].Value + "','" +
                          dgMaterialOrderI.Rows[i].Cells[4].Value + "','" +
                          dgMaterialOrderI.Rows[i].Cells[5].Value + "','" +
                          dgMaterialOrderI.Rows[i].Cells[6].Value + "','" +
                          dgMaterialOrderI.Rows[i].Cells[7].Value + "')";
                OleDbCommand OBJcmd = new OleDbCommand(sql, sqlConn);
                OBJcmd.ExecuteNonQuery();
            }

解决方案 »

  1.   

    编辑后的内容在上面追加的场合,也没有体现。是不是应该有一句datagridview更新什么的,
    dgMaterialOrderI中的数据,才可以和看到的相同!谢谢!
      

  2.   

    你删除之后,致使巴DataGridView中的内容删除了,有更新到数据库里面么?
      

  3.   

    你在删除gridview后,写sql更新语句将数据库里值修改
      

  4.   

        private ArrayList logidlist;    private string logid;private string logidli;protected void Button2_Click(object sender, EventArgs e)    {        ArrayList logidlist = new ArrayList(); //实例化   
            foreach (GridViewRow row in this.gridView.Rows)        {            Control ctrl = row.FindControl("del");          
                if ((ctrl as CheckBox).Checked)            {               
                    TableCellCollection cell = row.Cells;                 logid = cell[1].Text;//将checkbox选中记录的ID赋给logid                 logidlist.Add(logid);//将logid的值添加到logidlist数组中                 ViewState["logidlist"] = logidlist;            }        }        for (int i = 0; i < logidlist.Count; i++)               //此处是一个循环,将遍历数组中的取值,依次删除对应数据库记录        {            logidli = logidlist[i].ToString();//将数组中的值依次赋给变量logidli            ViewState["logidli"] = logidli;            le.deleteLog(ViewState["logidli"].ToString());//在循环中依次删除数据        }        dt = le.getData(ViewState["datefrom"].ToString(), ViewState["dateto"].ToString());                                           //删除数据之后重新执行一次查询,刷新现有数据        this.gridView.DataSource = dt;        this.gridView.DataBind();        Response.Write("<script>alert('删除成功!');</script>");  
                                                 //执行完以上代码之后,提示删除成功 
     }
      

  5.   


    如何更新啊?
    谢谢两位的回答,有没有办法:同步一下。datagridview表格中内容到datatable中。:)
      

  6.   

    更新和删除之后再做一次数据绑定。  datagridview.datasoucre=datatable;
      

  7.   

    刪除的時候你要更新DataTable啊,然後再重新綁定。你現在都沒有更新DataTable哦。
      

  8.   

    现在看上去修改datagridview没影响到datatable。请给段更新datatable的代码。现在的问题是说下面循环取得dgMaterialOrderI中的值的时候,dgMaterialOrderI中的记录条数和内容是修改前的。如何把现在画面上dgMaterialOrderI中修改了cell,删除了row的内容,体现到数据库中!for (int i = 0; i < dgMaterialOrderI.Rows.Count - 1; i++)
                {
                    String sql = " insert into tb_MaterialOrderDetail(SignOrderDate,SignOrderID,OrderID,OrderDate,DetailNo," +
                          "MaterialName,MaterialStandards,MaterialMeasurement,MaterialQuantity,MaterialUnitPrice,MaterialAmount,MaterialRes) values('" +
                              SignOrderDate + "','" + lblSignOrder.Text.Substring(8, 3) + "','" +
                              txtID.Text + "','" + OrderDate + "','" + i + "','" +
                              dgMaterialOrderI.Rows[i].Cells[1].Value + "','" +

                              dgMaterialOrderI.Rows[i].Cells[7].Value + "')";
                    OleDbCommand OBJcmd = new OleDbCommand(sql, sqlConn);
                    OBJcmd.ExecuteNonQuery();
                }
      

  9.   

    在对应的事件里面,点击删除等按钮的时候,先进行数据库更新:
    SqlConnection con=..
    SqlCommand cmd=..
    cmd.CommandText=..
    cmd.ExcuteNonQuery();
    之后重新从数据库中获取数据,GridView的数据源
      

  10.   

    设置主键,该列隐藏,点击删除按钮的时候,更新到数据库该条记录;
    如果datagridview同步更新的话可以, dataGridView1.Rows.RemoveAt(dataGridView1.CurrentRow.Index);