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

Page_Load加载SQL数据后,能否在DropdownList选中事件复用数据?

如何在SelectedIndexChanged事件中复用已加载的DataTable数据

完全可以复用已加载的数据,不需要再次查询SQL Server。你只需要把Page_Load中加载的DataTable存储到一个页面回发后依然能访问的容器(比如ViewState),之后在SelectedIndexChanged事件中取出并使用即可。

实现步骤

  1. 在Page_Load中存储DataTable到ViewState
    修改Page_Load方法,将加载完成的DataTable存入ViewState,这样页面回发后数据不会丢失:
protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack) 
    { 
        string mainconn1 = ConfigurationManager.ConnectionStrings["SqlConnection1"].ConnectionString;
        // 使用using自动释放数据库连接,避免资源泄漏
        using (SqlConnection sqlconn1 = new SqlConnection(mainconn1))
        {
            string Sqlquery1 = "SELECT p.[Name], m.machineid,md.MachineNumber, md.HostName FROM [db].[dbo].[Machine] m INNER JOIN MachineDevice md ON md.MachineID = m.MachineID INNER JOIN property p ON m.PropertyID = p.PropertyID WHERE ([status] = '1') AND (md.DateTimeRetired IS NULL) ORDER BY md.MachineNumber";
            SqlCommand sqlcomm1 = new SqlCommand(Sqlquery1, sqlconn1);
            sqlconn1.Open();
            SqlDataReader rd1 = sqlcomm1.ExecuteReader();
            DataTable dt = new DataTable();
            dt.Load(rd1);
            // 将DataTable存入ViewState
            ViewState["MachineData"] = dt;
        }
    }
}
  1. 在SelectedIndexChanged事件中取出并使用DataTable
    从ViewState中取出之前保存的DataTable,根据下拉框的选中值过滤数据后绑定到目标控件:
protected void Ort_SelectedIndexChanged1(object sender, EventArgs e)
{
    // 检查ViewState中是否存在保存的DataTable
    if (ViewState["MachineData"] is DataTable machineDataTable)
    {
        if (Ort.SelectedValue == "Stockholm")
        {
            // 使用Linq过滤出对应城市的数据(需引用System.Data.DataSetExtensions命名空间)
            DataTable filteredData = machineDataTable.AsEnumerable()
                                                    .Where(row => row.Field<string>("Name") == "Stockholm")
                                                    .CopyToDataTable();
            
            // 绑定到Machine下拉框
            Machine.DataSource = filteredData;
            Machine.DataTextField = "MachineNumber";
            Machine.DataValueField = "MachineNumber";
            Machine.DataBind();
            Machine.Items.Insert(0, new ListItem("-Select Machine-", "0"));
        }
        // 可扩展其他城市的处理逻辑
        // else if (Ort.SelectedValue == "其他城市") { ... }
    }
}

补充说明

  • ViewState的适用场景:适合存储页面级的小到中等数据量,数据仅在当前页面回发时复用。如果需要跨页面复用数据或数据量较大,可以考虑使用Session或Cache。
  • 数据一致性问题:如果数据库中的数据在用户操作期间可能被修改,复用ViewState中的数据会导致显示过期数据,这种情况下需要重新查询数据库;若数据相对稳定,复用则能有效减少数据库请求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 18:50:26