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

解决无法将Attendance隐式转换为List<Attendance>的C#错误

问题解决与功能实现

错误核心原因

attendanceList = aAttendance.getAttendance(attributename);报错的本质是类型不匹配:

  • getAttendance方法返回的是单个Attendance对象
  • 你试图将它赋值给List<Attendance>类型的变量,C#不允许这种隐式转换

另外还有一个低级错误:文本框取值用tb_classcode.ToString()会返回控件的类型字符串,而非用户输入的内容,正确写法是tb_classcode.Text。

解决方案

方案1:修改getAttendance方法返回List<Attendance>(推荐)

这种方式更灵活,既能处理单个匹配记录,也能兼容多个匹配结果,完美适配GridView的数据源要求:

修改Attendance类中的getAttendance方法:

public List<Attendance> getAttendance(string ClassCode)
{
    List<Attendance> attendanceList = new List<Attendance>();

    string Teacher_ID, TeachingSessions, Remarks;

    string queryStr = "Select * From Attendance Where ClassCode = @ClassCode";

    // 使用using自动释放数据库资源,避免内存泄漏
    using (SqlConnection conn = new SqlConnection(_connStr))
    using (SqlCommand cmd = new SqlCommand(queryStr, conn))
    {
        cmd.Parameters.AddWithValue("@ClassCode", ClassCode);
        conn.Open();
        using (SqlDataReader dr = cmd.ExecuteReader())
        {
            while (dr.Read())
            {
                Teacher_ID = dr["Teacher_ID"].ToString();
                TeachingSessions = dr["TeachingSessions"].ToString();
                Remarks = dr["Remarks"].ToString();

                Attendance attendanceDetail = new Attendance(ClassCode, Teacher_ID, TeachingSessions, Remarks);
                attendanceList.Add(attendanceDetail);
            }
        }
    }

    return attendanceList;
}

方案2:在页面中包装单个对象为List

如果不想修改类方法,可在点击事件中将返回的单个对象手动加入List:

修改Retrieve_Attendance_Click方法:

protected void Retrieve_Attendance_Click(object sender, EventArgs e)
{
    string classCode = tb_classcode.Text; // 修复取值错误
    List<Attendance> attendanceList = new List<Attendance>();
    Attendance singleAttendance = aAttendance.getAttendance(classCode);
    if (singleAttendance != null)
    {
        attendanceList.Add(singleAttendance);
    }
    GridView1.DataSource = attendanceList;
    GridView1.DataBind();
}

最终完整页面代码(采用方案1)

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI.WebControls; 
using System.Data; 
using System.Data.SqlClient; 
using System.Configuration;

namespace Lab06 { 
    public partial class AssignmentAttendance : System.Web.UI.Page 
    { 
        Attendance aAttendance = new Attendance(); 
        protected void Page_Load(object sender, EventArgs e) 
        { 
            if (!IsPostBack) 
            {
                 bind(); 
            } 
        } 
        protected void bind() 
        { 
            List<Attendance> attendancelist = aAttendance.getAttendanceAll(); 
            GridView1.DataSource = attendancelist; 
            GridView1.DataBind(); 
        }
        protected void Retrieve_Attendance_Click(object sender, EventArgs e)
        {
            string classCode = tb_classcode.Text;
            List<Attendance> attendanceList = aAttendance.getAttendance(classCode);
            GridView1.DataSource = attendanceList;
            GridView1.DataBind();
        }
    }
}

额外优化建议

  • 增加输入验证:查询前判断tb_classcode.Text是否为空,避免无效的空值查询
  • 处理无数据场景:如果attendanceList为空,可给GridView设置空数据提示模板

内容的提问来源于stack exchange,提问作者Ian Wong

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 04:55:33