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

ASP.NET框架下TextBox展示Access数据库多条记录仅显示最后一条问题

问题根因

你页面仅声明了4个固定的TextBox控件,循环读取每条数据时对TextBox的Text属性赋值都会覆盖上一次的内容,最终页面只会保留最后一次赋值的记录,和数据库读取逻辑无关。同时你的原有代码存在冗余逻辑:外层for计数循环完全多余,OleDbDataReader的Read()方法会自动遍历所有匹配记录,不需要额外通过count值循环控制。

最优解决方案:使用Repeater列表控件绑定数据

ASP.NET的Repeater控件专为重复结构的列表数据渲染设计,无需手动控制控件生成,代码维护成本更低。

前端替换代码

<div>
    <asp:Repeater ID="rpt_JobList" runat="server">
        <ItemTemplate>
            <ul style="list-style-type:none">
                <li>
                    <asp:TextBox ID="txt_cname" runat="server" BorderStyle="None" Text='<%# Eval("cmp_name") %>'></asp:TextBox>
                </li>
                <li>
                    <asp:TextBox ID="txt_city" runat="server" BorderStyle="None" Text='<%# Eval("cmp_city") %>'></asp:TextBox>
                </li>
                <li>
                    <asp:TextBox ID="txt_cstate" runat="server" BorderStyle="None" Text='<%# Eval("cmp_state") %>'></asp:TextBox>
                </li>
                <li>
                    <asp:TextBox ID="txt_cjob" runat="server" BorderStyle="None" Text='<%# Eval("job_name") %>'></asp:TextBox>
                </li>
                <hr />
            </ul>
        </ItemTemplate>
    </asp:Repeater>
</div>

后台替换代码

con.Open();
// 按需查询字段,避免select * 浪费性能
OleDbCommand md = new OleDbCommand("select cmp_name,cmp_city,cmp_state,job_name from tbl_cmpjobdet", con);
OleDbDataAdapter da = new OleDbDataAdapter(md);
DataTable dtJob = new DataTable();
da.Fill(dtJob);
// 直接绑定到Repeater控件,自动生成所有记录的对应控件
rpt_JobList.DataSource = dtJob;
rpt_JobList.DataBind();
con.Close();

// 可选:无数据时的提示逻辑
if(dtJob.Rows.Count == 0)
{
    // 自行添加无岗位的提示逻辑
}
备选方案:动态生成控件(不推荐,仅适合特殊场景)

如果不想引入Repeater控件,可以在循环读取数据时动态生成对应的TextBox添加到页面容器,不要复用固定的4个控件:

  1. 前端先添加一个容器控件:
<div>
    <asp:PlaceHolder ID="plh_JobContainer" runat="server"></asp:PlaceHolder>
</div>
  1. 后台逻辑:
con.Open();
OleDbCommand md = new OleDbCommand("select cmp_name,cmp_city,cmp_state,job_name from tbl_cmpjobdet", con);
OleDbDataReader dr = md.ExecuteReader();
while(dr.Read())
{
    // 每条记录单独生成一组控件
    TextBox txt_cname = new TextBox();
    txt_cname.BorderStyle = BorderStyle.None;
    txt_cname.Text = dr["cmp_name"].ToString();

    TextBox txt_city = new TextBox();
    txt_city.BorderStyle = BorderStyle.None;
    txt_city.Text = dr["cmp_city"].ToString();

    TextBox txt_cstate = new TextBox();
    txt_cstate.BorderStyle = BorderStyle.None;
    txt_cstate.Text = dr["cmp_state"].ToString();

    TextBox txt_cjob = new TextBox();
    txt_cjob.BorderStyle = BorderStyle.None;
    txt_cjob.Text = dr["job_name"].ToString();

    // 组装结构添加到容器
    plh_JobContainer.Controls.Add(new LiteralControl("<ul style='list-style-type:none'><li>"));
    plh_JobContainer.Controls.Add(txt_cname);
    plh_JobContainer.Controls.Add(new LiteralControl("</li><li>"));
    plh_JobContainer.Controls.Add(txt_city);
    plh_JobContainer.Controls.Add(new LiteralControl("</li><li>"));
    plh_JobContainer.Controls.Add(txt_cstate);
    plh_JobContainer.Controls.Add(new LiteralControl("</li><li>"));
    plh_JobContainer.Controls.Add(txt_cjob);
    plh_JobContainer.Controls.Add(new LiteralControl("</li><hr/></ul>"));
}
dr.Close();
con.Close();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.28 17:45:05