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

如何遍历ListView检查书籍是否按时完成阅读

实现ListView遍历判断逻辑的方案

核心思路

  1. 遍历ListView的每一项,提取应完成时间(ReadByThisTime)和实际完成时间(ReadAt)
  2. 将字符串格式的时间转换为DateTime类型,避免字符串直接比较的误差
  3. 判断条件:应完成时间已过期(小于当前时间),且实际完成时间为空/未完成(或完成时间晚于截止时间)
  4. 满足条件时弹出提示框

完整实现代码

// 遍历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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 09:50:44