如何从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
相关产品推荐
相关产品推荐

