上面博客分享了DataGridView控件查的操作,查完之后按照套路就是增删改,没错,今天分享删的操作,也就是强制下机功能

设计知识点

  • Datatable.GetChanges()方法
  • Foreach循环
  • DataRow.RowState属性
  • 对删除行的取值
  • 下机+存储过程

其实别看列的条多,也就是一行代码,接下来,咱们一个个来看


知识点


一、Datatable.GetChanges()方法

//存储自加载以来对数据表中所作的操作
DataTable changeDt =onlinetable.GetChanges();

正如注释所说,存储的操作有增删改,并以表的保存

机房重构——强制下机(DataGridView控件删除操作)

红点便表示咱们删除的两行

二、foreach循环

foreach (DataRow dr in changeDt.Rows)

使用foreach循环去逐行遍历咱们刚刚操作的表,格式是

foreach(数据类型 标识符 in 表达式)

这里changeDt.Rows便是行的集合

三、DataRow.RowState属性

dr.RowState == System.Data.DataRowState.Deleted

刚才咱们说,操作有三个增删改,这里的操作就是行的状态,因此现在的状态是Deleted;

四、对删除行的取值

//onDate为online表字段
dr["onDate", DataRowVersion.Original]

因为删除行之后当前有可能为空,有可能是新的行,因此咱们需要取原来行的值也就是

DataRowVersion.Original,是取那个版本的值,有原始,当前,默认。

五、下机+存储过程

这个是下机的基础,是DAL层的操作,就不多说了


代码


private void btnSave_Click(object sender, EventArgs e)
{
    //当前的每小时钱数
    Facade.BasicdataFacade basicdataFacade = new Facade.BasicdataFacade();
    DataTable basictable = basicdataFacade.SelectBasic();
    string ratemoney = basictable.Rows[0]["rateMoney"].ToString().Trim();

    //实例化下机
    Facade.LineFacade lineFacade = new Facade.LineFacade();
    Entity.LineEntity lineEntity = new Entity.LineEntity();

    //存储自加载以来对数据表中所作的操作
    DataTable changeDt =onlinetable.GetChanges();
            
    if (changeDt==null)
    {
        MessageBox.Show("未删除上机用户", "温馨提示");
    }
    else
    {
        //使用循环逐行读取数据
        foreach (DataRow dr in changeDt.Rows)
        {
            if (dr.RowState == System.Data.DataRowState.Deleted)
            {
                //调用算上机时长
                int spenttime = DateDiff(Convert.ToDateTime(dr["onDate",  DataRowVersion.Original]), DateTime.Now);
                //算消费的金额
                int spentcash = Convert.ToInt32(ratemoney) * spenttime;
                Decimal balance = Convert.ToDecimal(dr["Balance", DataRowVersion.Original]) - spentcash;

                lineEntity.CustID = dr["custID", DataRowVersion.Original].ToString();
                lineEntity.OnDate = dr["onDate", DataRowVersion.Original].ToString();
                lineEntity.OffDate = DateTime.Now.ToString();
                lineEntity.ConsumeTime = spenttime;
                lineEntity.ConsumeCash = spentcash;
                lineEntity.Balance = balance;
                lineEntity.Computer = System.Environment.MachineName;
                int  result = lineFacade.AddLine(lineEntity);
                if (result != 0)
                {
                    if (flag == true)
                    {
                        MessageBox.Show("下机成功", "温馨提示");
                        flag = false;
                    }

                }
                else
                {
                    MessageBox.Show("下机失败", "温馨提示");
                }
            }

        }

    }
}

对于这段代码

if (flag == true)
{
    MessageBox.Show("下机成功", "温馨提示");
    flag = false;
}

为了限制MessageBox出现次数,定义了一个记录状态的值,类似于单例模式。

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-12-06
  • 2022-12-23
  • 2021-08-02
  • 2021-07-23
  • 2021-07-04
  • 2022-12-23
猜你喜欢
  • 2021-08-21
  • 2021-09-15
  • 2021-04-20
  • 2021-10-06
  • 2021-07-25
  • 2022-12-23
  • 2021-12-21
相关资源
相似解决方案