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

根据ID字符串数组查询数据库记录填充GridView及模板字段控件

解决方案

核心逻辑修正

原代码存在逻辑顺序错误:循环遍历GridView行的同时反复调用DataBind()重置控件,会导致之前的赋值全部丢失,且最终只会保留最后一个ID的查询结果。正确的实现逻辑是先收集全量数据一次性绑定GridView,模板字段控件的赋值全部放在RowDataBound事件中处理。


实现步骤

1. 全量数据查询与一次性绑定

在数据加载触发逻辑(如Page_Load、查询按钮点击事件)中写入以下代码:

// 拆分ID数组,过滤空值
string[] moodleIDs = this.moodleID.Split(',', StringSplitOptions.RemoveEmptyEntries);
ScheduleToMoodleTemplate templateHandler = new ScheduleToMoodleTemplate();
List<ScheduleToMoodleTemplate> dataList = new List<ScheduleToMoodleTemplate>();

// 遍历ID查询所有匹配数据
foreach (string id in moodleIDs)
{
    var item = templateHandler.ScheduleToMoodleTemplateSelectByID(id);
    if (item != null)
    {
        dataList.Add(item);
    }
}

// 一次性绑定GridView
gvEdit.DataSource = dataList;
gvEdit.DataBind();

2. 模板字段控件赋值(RowDataBound事件实现)

你前端已经声明了OnRowDataBound="gvEdit_RowDataBound",直接在后台实现该事件即可,每行数据绑定完成后会自动触发该事件处理模板字段:

protected void gvEdit_RowDataBound(object sender, GridViewRowEventArgs e)
{
    // 仅处理数据行,跳过表头、页脚等行
    if (e.Row.RowType != DataControlRowType.DataRow)
    {
        return;
    }

    // 获取当前行绑定的数据源对象
    ScheduleToMoodleTemplate currentItem = (ScheduleToMoodleTemplate)e.Row.DataItem;

    // 查找当前行内的模板控件
    DropDownList ddlScheduleType = e.Row.FindControl("DDLScheduleType") as DropDownList;
    DropDownList ddlDeliverType = e.Row.FindControl("DDLDeliverType") as DropDownList;
    TextBox tbCourseEdit = e.Row.FindControl("TbCourseEdit") as TextBox;

    // 先绑定下拉框选项,再赋值SelectedValue,避免出现"项不在列表中"错误
    getScheduleTypeDDL(ddlScheduleType);
    getDeliverTypeDDL(ddlDeliverType);

    // 给控件赋值
    if (currentItem.ScheduleTypeID.HasValue)
    {
        ddlScheduleType.SelectedValue = currentItem.ScheduleTypeID.Value.ToString();
    }
    if (currentItem.DeliverTypeID.HasValue)
    {
        ddlDeliverType.SelectedValue = currentItem.DeliverTypeID.Value.ToString();
    }
    int courseId = 0;
    int.TryParse(currentItem.CourseID?.ToString(), out courseId);
    tbCourseEdit.Text = currentItem.getCourseNameByID(courseId);
}

注意事项

  • 若ScheduleToMoodleTemplateSelectByID返回的是DataRow/DataSet类型,调整RowDataBound中获取当前行数据的逻辑即可,无需修改整体流程
  • 下拉框的选项绑定方法getScheduleTypeDDL、getDeliverTypeDDL不需要额外修改,保持原有实现即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 01:45:03