做一winform系统,明细数据的输入是个难做的问题,对于明细多条数据录入的,我用的是datagridview,在datagridview行里输入数据,点击保存数据保存把数据保存到数据库表中,数据保存这块一直没有处理好,保存数据会经常出错,做过类似问题的请给些建议或是例子,谢谢

解决方案 »

  1.   

    为什么能出错呢。你用databingsource 了吗 ? 你在插入前先判断下是不是数据行然后在插入就好了 我做过 没有错误 他提示什么错误??
      

  2.   

    插入之前遍历数据 判断如果是数据行就插入 可以考虑用dataset 实现
      

  3.   

    你的意思是在datagridview里自由编辑数据然后提交到数据库么??? 如果是SQL数据我想我也许能帮到你的忙...
      

  4.   

    我把我做过的列子给你看下如果有用就拿去参考下吧呵呵
      protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
                Bind();
           
        }
        private void Bind()
        {
            SqlConnection con = new SqlConnection("server=.;database=Students;uid=sa;pwd=1");
            con.Open();
            SqlDataAdapter da = new SqlDataAdapter("select * from StuInfo", con);
            DataSet ds = new DataSet();
            da.Fill(ds, "stuinfo");
            con.Close();
            GridView1.DataSource = ds.Tables["stuinfo"].DefaultView;        //定义Gridview的记录的键字段
            string[] keys = new string[] { "Id" };
            GridView1.DataKeyNames = keys;
            GridView1.DataBind();
        }
        protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
        {
            GridView1.EditIndex = e.NewEditIndex;
            Bind();
        }
        protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {
            SqlConnection con = new SqlConnection("server=.;database=Students;uid=sa;pwd=1");
            con.Open();
            int Id =Convert .ToInt32( ((TextBox)GridView1.Rows[e.RowIndex].Cells[0].Controls[0]).Text);
            string Name=((TextBox)(GridView1.Rows[e.RowIndex].Cells[1].Controls[0])).Text;
            string Sex=((TextBox)(GridView1.Rows[e.RowIndex].Cells[2].Controls[0])).Text;
            string Love=((TextBox)(GridView1.Rows[e.RowIndex].Cells[3].Controls[0])).Text;
            string strsql = "update StuInfo set Name='"+Name+"',Sex='"+Sex+"',Love='"+Love+"' where Id="+Id;
            SqlCommand cmd = new SqlCommand(strsql, con);
            cmd.ExecuteNonQuery();
            con.Close();        GridView1.EditIndex = -1;
            Bind();
        }
        protected void GridView1_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
        {
            GridView1.EditIndex = -1;
            Bind();
        }
    }
    总之先看看不明白的地方在提呵呵希望帮得到你原理都在这里了
      

  5.   

    我做过类似的是绑定DataTable,然后保存的时候检测DataTable的RowState 然后根据Add Modified Deleted 等等状态来提交到数据库
      

  6.   

    保存到数据库的代码有问题了吧,从datagridveiw里取数应该没问题,麻烦的是对于所取出的同一行的数据是否匹配等的判断。