You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何从ListBox更新数据集?办公资产管理系统批量资产借出实现

实现批量资产借出的数据集搜索与更新方案

嘿,我来帮你梳理下这个批量资产借出功能的实现思路,咱们从数据集的搜索和更新两个核心环节入手,结合常规的桌面应用开发逻辑来完善:


一、SM编号添加时的有效性验证(搜索数据集)

用户把TextBox里的SM编号移到ListBox前,得先确认这个编号在资产数据集里存在,且是可借出状态,避免无效操作。这里提供两种常见的数据集搜索方式:

方式1:用DataTable原生Select方法

假设你的资产数据存储在DataTable(比如命名为assetTable),包含SMNumber(SM编号)、IsBorrowed(是否已借出)等字段:

private void btnAddToList_Click(object sender, EventArgs e)
{
    string smNumber = txtSM.Text.Trim();
    if (string.IsNullOrEmpty(smNumber))
    {
        MessageBox.Show("请输入有效的SM编号");
        return;
    }

    // 搜索数据集:匹配SM编号且未被借出的记录
    DataRow[] matchedRows = assetTable.Select($"SMNumber = '{smNumber}' AND IsBorrowed = False");
    if (matchedRows.Length == 0)
    {
        MessageBox.Show("该SM编号不存在或已被借出");
        return;
    }

    // 避免重复添加同一编号到ListBox
    if (!lstBorrowAssets.Items.Contains(smNumber))
    {
        lstBorrowAssets.Items.Add(smNumber);
        txtSM.Clear();
    }
}

方式2:用LINQ查询(更简洁灵活)

如果习惯LINQ语法,可以用更直观的方式筛选数据:

var targetAsset = assetTable.AsEnumerable()
    .FirstOrDefault(row => row.Field<string>("SMNumber") == smNumber && !row.Field<bool>("IsBorrowed"));
if (targetAsset == null)
{
    MessageBox.Show("该SM编号不存在或已被借出");
    return;
}

二、批量更新数据集完成借出操作

当用户确认要借出所有ListBox中的资产时,遍历编号批量更新数据集,最后同步到数据源(比如数据库):

核心更新逻辑(含事务保障)

private void btnConfirmBorrow_Click(object sender, EventArgs e)
{
    if (lstBorrowAssets.Items.Count == 0)
    {
        MessageBox.Show("请先添加要借出的资产");
        return;
    }

    // 开启事务,确保批量操作的原子性(要么全成功,要么全回滚)
    using (var transaction = yourDbConnection.BeginTransaction())
    {
        try
        {
            foreach (string smNumber in lstBorrowAssets.Items)
            {
                // 找到对应资产记录
                DataRow assetRow = assetTable.Select($"SMNumber = '{smNumber}'")[0];
                // 更新借出相关字段
                assetRow["IsBorrowed"] = true;
                assetRow["BorrowerName"] = CurrentLoggedInUser.Name; // 替换为当前登录用户信息
                assetRow["BorrowDateTime"] = DateTime.Now;
            }

            // 将数据集的变更同步到数据库(用DataAdapter的Update方法)
            yourDataAdapter.Update(assetTable);
            transaction.Commit();

            MessageBox.Show("资产批量借出成功!");
            lstBorrowAssets.Items.Clear();
        }
        catch (Exception ex)
        {
            transaction.Rollback();
            MessageBox.Show($"借出失败:{ex.Message}");
        }
    }
}

几个关键优化点

  • 防SQL注入:如果直接操作数据库,建议用参数化查询代替字符串拼接的Select,比如通过SqlCommand传递参数来查询和更新,避免安全风险。
  • 扩展状态校验:可以额外校验资产是否处于维修、报废等不可借出状态,提升业务严谨性。
  • 用户体验优化:在ListBox中显示资产的额外信息(如设备类型、型号),或者添加编号时实时提示状态,让用户操作更清晰。

内容的提问来源于stack exchange,提问作者James Morrish

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 10:01:45