峰峦@叠嶂 2023-09-25 15:20 采纳率: 98.4%
浏览 7
已结题

计算工时单价项的问题;

请教个问题,我们下方的工时单价(dayprice),计算公式是:总薪资(totalsalary)/工时*8,得到的计算结果,其中这个总薪资(totalsalary),是“产量薪资+出成奖励+ 包材奖励”,是在下面的datagridview表格计算出来的(滞后计算),这样的话,导致前一步的总薪资(totalsalary),没有计算结果,从而导致工时单价(dayprice),也没办法计算(我注释掉的部分),相关截图,和代码如下,请问怎么解决呢;

img

foreach (DataRow row in resultTable.Rows)
                {
                    // 计算考核数量
                    decimal instock = Convert.ToDecimal(row["instock"]);
                    decimal sample = Convert.ToDecimal(row["sample"]);
                    decimal checkNum = instock + sample;
                    row["考核数量"] = checkNum;

                    // 计算产量薪资                             
                    decimal price = Convert.ToDecimal(row["price"]);
                    decimal salary = checkNum * price;
                    row["产量薪资"] = salary;             

                    //将考核数量与产品单价,做序列的调换
                    decimal temp = (decimal)row["考核数量"];
                    row["考核数量"] = row["price"];
                    row["price"] = temp;

                    //万盒工时计算  
                    decimal workhour = Convert.ToDecimal(row["ulh"]);
                    decimal unitworkhour = (workhour / checkNum) * 10000;
                    row["万盒工时"] = unitworkhour;
           
                    //工日单价计算                   
                    //decimal totalsalary = Convert.IsDBNull(row["总薪资"]) ? 0 : Convert.ToDecimal(row["总薪资"]);
                    //decimal totalsalary;            
                    //decimal dayprice = workhour / totalsalary * 8;
                    //row["工日单价"] = dayprice;              
                  
                }

                dataGridView1.DataSource = resultTable;
        
                this.dataGridView1.DefaultCellStyle.WrapMode = DataGridViewTriState.True;

                dataGridView1.Columns[0].HeaderText = "日期";
                dataGridView1.Columns[1].HeaderText = "批号";
                dataGridView1.Columns[2].HeaderText = "产品批号";
                dataGridView1.Columns[3].HeaderText = "产品名称";
                dataGridView1.Columns[4].HeaderText = "规格";
                dataGridView1.Columns[5].HeaderText = "班组";
                dataGridView1.Columns[6].HeaderText = "工序";
                dataGridView1.Columns[7].HeaderText = "单位";
                dataGridView1.Columns[8].HeaderText = "工时";
                dataGridView1.Columns[9].HeaderText = "入库数量";
                dataGridView1.Columns[10].HeaderText = "取样数量";
                dataGridView1.Columns[11].HeaderText = "考核数量";
                dataGridView1.Columns[12].HeaderText = "产品单价";               
                dataGridView1.Columns[13].HeaderText = "产量薪资";
                dataGridView1.Columns[14].HeaderText = "出成奖励";
                dataGridView1.Columns[15].HeaderText = "包材奖励";
                dataGridView1.Columns[16].HeaderText = "总薪资";
                dataGridView1.Columns[17].HeaderText = "工日单价";
                dataGridView1.Columns[18].HeaderText = "万盒工时";
            
                // 将合计值赋值给最后一行的该列单元格,并在相邻单元格上,加上标识;

                dataGridView1.Rows[dataGridView1.Rows.Count - 1].Cells[8].Value = workhourtotal.ToString();

                dataGridView1.Rows[dataGridView1.Rows.Count - 1].Cells[7].Value = "合计工时";
            }

            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
            finally { conn.Close(); }
        }
       
        //以下,是针对计算总薪资的计算,等于产量薪资,与出成和包材奖励之和;
        private void dataGridView1_CellEndEdit(object sender, DataGridViewCellEventArgs e)
        {
             decimal a,b, c;

            if (dataGridView1.Rows[e.RowIndex].Cells[13].Value == DBNull.Value)
            {
                a = 0;
            }
            else
            {
                a = Convert.ToDecimal(dataGridView1.Rows[e.RowIndex].Cells[13].Value);
            }

            if (dataGridView1.Rows[e.RowIndex].Cells[14].Value == DBNull.Value)
            {
                b = 0;
            }
            else
            {
                b = Convert.ToDecimal(dataGridView1.Rows[e.RowIndex].Cells[14].Value);
            }

            if (dataGridView1.Rows[e.RowIndex].Cells[15].Value == DBNull.Value)
            {
                c = 0;
            }
          
            else
            {
                c = Convert.ToDecimal(dataGridView1.Rows[e.RowIndex].Cells[15].Value);
            }


            decimal totalsalary = a + b + c;

            dataGridView1.Rows[e.RowIndex].Cells[16].Value = totalsalary;

        }
        

  • 写回答

1条回答 默认 最新

  • alongba 2023-09-28 16:00
    关注

    解决办法是将"总薪资"的计算放在DataTable里,不要放datagridview里计算,即在foreach 循环前加如下代码:
    resultTable.Columns["总薪资"].Expression="产量薪资+出成奖励+包材奖励";
    (注意栏位的数据类型,如果产量薪资等是字符串,则要加Convert转换)
    这样,foreach 循环里的“工时单价”就可以计算出来了。
    不知我的这个办法是否能帮到你,祝你好运。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 10月25日
  • 已采纳回答 10月17日
  • 修改了问题 9月25日
  • 修改了问题 9月25日
  • 展开全部