遇到怪事,请达人指教!!

时间:2021-10-25 19:17:25
为什么只有光标移到其它行才能修改成功,在当前行修改不成功。。谢谢
以下是代码:
private SqlConnection conn = null;
        private SqlDataAdapter sda = null;
        private const string DRIVER = "server = erp05;database=free;uid=sa;pwd=123456";
        private DataSet ds = new DataSet();

        private void Form2_Load(object sender, EventArgs e)
        {      
            conn = new SqlConnection(DRIVER);
            SqlCommand cmd = new SqlCommand();
            cmd.Connection = conn;
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.CommandText = "proc_requirement";
            SqlParameter[] spa = 
             { 
                  new SqlParameter ("@C1",SqlDbType.VarChar,20 ), 
                  new SqlParameter ("@C2",SqlDbType.VarChar,100 ), 
                  new SqlParameter ("@C4",SqlDbType.VarChar,20 ), 
                  new SqlParameter ("@C5",SqlDbType.VarChar,30 ), 
                  new SqlParameter ("@C6",SqlDbType.VarChar,100 ), 
                  new SqlParameter ("@C15",SqlDbType.VarChar,200 ), 
                  new SqlParameter ("@C22",SqlDbType.VarChar,20 ),
                  new SqlParameter ("@C31",SqlDbType.VarChar,50 )
             };
            spa[0].Value = C1.Text;
            spa[1].Value = C2.Text;
            spa[2].Value = C4.Text;
            spa[3].Value = C5.Text;
            spa[4].Value = C6.Text;
            spa[5].Value = C15.Text;
            spa[6].Value = C22.Text;
            spa[7].Value = C31.Text;           
            cmd.Parameters.AddRange(spa);   //把参数添加到cmd中 
            sda = new SqlDataAdapter();
            sda.SelectCommand = cmd;  //把cmd赋值给sda的内置SelectCommand对象   
            //DataSet ds = new DataSet();
            sda.Fill(ds,"table");
            this.dataGridView1.DataSource = ds.Tables["table"];
}
private bool BtnUpdate()
        {
            SqlParameter para = new SqlParameter();
            sda.UpdateCommand = conn.CreateCommand();            
            StringBuilder SqlUpdate = new StringBuilder();
            SqlUpdate.Append("update requirement set C1=@C1,C2=@C2,C3=@C3,C4=@C4,C5=@C5,C6=@C6,C7=@C7,C8=@C8,C9=@C9,C10=@C10, ");
            SqlUpdate.Append(" C11=@C11,C12=@C12,C13=@C13,C14=@C14,C15=@C15,C16=@C16,C17=@C17,C18=@C18,C19=@C19,C20=@C20,");
            SqlUpdate.Append(" C21=@C21,C22=@C22,C23=@C23,C24=@C24,C25=@C25,C26=@C26,C27=@C27,C28=@C28,C29=@C29,C30=@C30,");
            SqlUpdate.Append(" C31=@C31,C32=@C32,C33=@C33,C34=@C34,C35=@C35,C36=@C36 where InterID = @InterID");
            sda.UpdateCommand.CommandText = SqlUpdate.ToString ();      
            
            sda.UpdateCommand .Parameters .Add ("@C1",SqlDbType .VarChar ,20,"工程编号");
            sda.UpdateCommand .Parameters .Add ("@C2",SqlDbType .VarChar ,100,"设备名称");
            sda.UpdateCommand .Parameters .Add ("@C3",SqlDbType .DateTime ,10,"日期");            
            sda.UpdateCommand .Parameters .Add ("@C4",SqlDbType .VarChar ,20,"物控员");
            sda.UpdateCommand .Parameters .Add ("@C5",SqlDbType .VarChar ,30,"物料编号");
            sda.UpdateCommand .Parameters .Add ("@C6",SqlDbType .VarChar ,100,"物料名称");
            sda.UpdateCommand .Parameters .Add ("@C7",SqlDbType .VarChar ,100,"物料规格");
            sda.UpdateCommand .Parameters .Add ("@C8",SqlDbType .VarChar ,100,"物料型号");
            sda.UpdateCommand .Parameters .Add ("@C9",SqlDbType .VarChar ,20,"物料品牌");
            sda.UpdateCommand .Parameters .Add ("@C10",SqlDbType .Int ,4,"配料数量");            
            sda.UpdateCommand .Parameters .Add ("@C11",SqlDbType .VarChar ,20,"单位");
            sda.UpdateCommand .Parameters .Add ("@C12",SqlDbType .Int ,4,"配件单套数");
            sda.UpdateCommand .Parameters .Add ("@C13",SqlDbType .Int ,4,"总需求数量");
            sda.UpdateCommand .Parameters .Add ("@C14",SqlDbType .DateTime ,10,"需求日期");
            sda.UpdateCommand .Parameters .Add ("@C15",SqlDbType .VarChar ,200,"备注");
            sda.UpdateCommand .Parameters .Add ("@C16",SqlDbType .VarChar ,30,"申购单号");
            sda.UpdateCommand .Parameters .Add ("@C17",SqlDbType .Int ,4,"申购欠数");
            sda.UpdateCommand .Parameters .Add ("@C18",SqlDbType .VarChar ,30,"申购工程");
            sda.UpdateCommand .Parameters .Add ("@C19",SqlDbType .DateTime ,10,"采购下单日期");
            sda.UpdateCommand .Parameters .Add ("@C20",SqlDbType .VarChar ,30,"采购PO号码");            
            sda.UpdateCommand .Parameters .Add ("@C21",SqlDbType .DateTime ,10,"采购回复到货日期");
            sda.UpdateCommand .Parameters .Add ("@C22",SqlDbType .VarChar ,20,"采购员");
            sda.UpdateCommand .Parameters .Add ("@C23",SqlDbType .DateTime ,10,"实际到货日期");
            sda.UpdateCommand .Parameters .Add ("@C24",SqlDbType .Int ,4,"到货数量");
            sda.UpdateCommand .Parameters .Add ("@C25",SqlDbType .VarChar ,10,"入仓点");
            sda.UpdateCommand .Parameters .Add ("@C26",SqlDbType .DateTime ,10,"发料日期");
            sda.UpdateCommand .Parameters .Add ("@C27",SqlDbType .Int ,4,"发料数量");
            sda.UpdateCommand .Parameters .Add ("@C28",SqlDbType .VarChar ,10, "发料员");
            sda.UpdateCommand .Parameters .Add ("@C29",SqlDbType .Int ,4,"尚欠数量");
            sda.UpdateCommand .Parameters .Add ("@C30",SqlDbType .VarChar ,10,"设计员");
            sda.UpdateCommand .Parameters .Add ("@C31",SqlDbType .VarChar ,20,"BOM编号");
            sda.UpdateCommand .Parameters .Add ("@C32",SqlDbType .VarChar ,10,"生产地点");
            sda.UpdateCommand .Parameters .Add ("@C33",SqlDbType .VarChar ,10,"生产组别");
            sda.UpdateCommand.Parameters.Add("@C34", SqlDbType.VarChar, 10, "申购部门");
            sda.UpdateCommand.Parameters.Add("@C35", SqlDbType.DateTime , 10, "生产完成日期");
            sda.UpdateCommand.Parameters.Add("@C36", SqlDbType.VarChar, 10, "状态");

            para = sda.UpdateCommand.Parameters.Add("@InterID", SqlDbType.Int, 4, "内码");
            para.SourceVersion = DataRowVersion.Original;            
            //sda.Fill(ds);
            int count = sda.Update(ds,"table");
            //ds.Clear();
            bool result = count > 0 ? true : false;
            return result;
        }

        private void toolStripButton10_Click(object sender, EventArgs e)
        {
            if (this.BtnUpdate())
            {
                //Form2_Load(sender, e);
                MessageBox.Show("修改成功", "提示:");                
            }
            else
            {
                //Form2_Load(sender, e);
                MessageBox.Show("修改失败", "提示:");                
            }
        }

6 个解决方案

#1


问题没提清楚,鉴定完毕。

#2


因为不失去焦点,是不会向DataTable中写数据的,但可以通过.EndEdit()等方法来强制刷新数据。

#3


自己先分析的,然后找重点提的

#4


gridview.endedit();

加一句试试.

#5


问题补充

行号   第一列    第二列 
1      A        E
2      B        F
3      C        G

如果修改第一行的内内容,必须把光标移到第二行或第三行才能修改成功,就算移到第二列也不行。

#6


实际问题要实际解决啊!确实不清楚

#1


问题没提清楚,鉴定完毕。

#2


因为不失去焦点,是不会向DataTable中写数据的,但可以通过.EndEdit()等方法来强制刷新数据。

#3


自己先分析的,然后找重点提的

#4


gridview.endedit();

加一句试试.

#5


问题补充

行号   第一列    第二列 
1      A        E
2      B        F
3      C        G

如果修改第一行的内内容,必须把光标移到第二行或第三行才能修改成功,就算移到第二列也不行。

#6


实际问题要实际解决啊!确实不清楚