如何遍历ListView检查书籍是否按时完成阅读
实现ListView遍历判断逻辑的方案
核心思路
- 遍历ListView的每一项,提取应完成时间(ReadByThisTime)和实际完成时间(ReadAt)
- 将字符串格式的时间转换为
DateTime类型,避免字符串直接比较的误差 - 判断条件:应完成时间已过期(小于当前时间),且实际完成时间为空/未完成(或完成时间晚于截止时间)
- 满足条件时弹出提示框
完整实现代码
// 遍历ListView并判断的方法 private void CheckOverdueBooks() { foreach (ListViewItem item in listView1.Items) { // 提取子项内容 string bookName = item.Text; string readByStr = item.SubItems[1].Text; string readAtStr = item.SubItems[2].Text; // 尝试转换应完成时间 if (DateTime.TryParse(readByStr, out DateTime readByTime)) { // 判断是否已过期 if (readByTime < DateTime.Now) { // 处理实际阅读时间:空值代表未完成,或完成时间晚于截止时间 bool isNotCompleted = string.IsNullOrEmpty(readAtStr); if (!isNotCompleted) { if (DateTime.TryParse(readAtStr, out DateTime readAtTime)) { isNotCompleted = readAtTime > readByTime; } else { // 若实际时间格式错误,视为未完成 isNotCompleted = true; } } if (isNotCompleted) { MessageBox.Show($"书籍《{bookName}》已过阅读截止时间,但未完成阅读!"); } } } else { // 若应完成时间格式错误,可选择提示或跳过 MessageBox.Show($"书籍《{bookName}》的截止时间格式无效!"); } } }
注意事项
- 确保数据库中
ReadByThisTime和ReadAt字段存储的是标准时间格式,避免转换失败 - 可以根据需求调整提示逻辑,比如合并所有过期书籍后一次性提示,避免多次弹窗
- 如果需要频繁判断,建议直接从
DataTable中读取数据判断,避免ListView字符串转换的额外开销(比如在filllistview方法中同步完成判断)
内容的提问来源于stack exchange,提问作者okra
相关产品推荐
相关产品推荐

