当我尝试在单个文本框中显示数据库中的 3 条记录时,仅显示最后一条记录,而不是 asp.net 空框架中的前两条
Posted
技术标签:
【中文标题】当我尝试在单个文本框中显示数据库中的 3 条记录时,仅显示最后一条记录,而不是 asp.net 空框架中的前两条【英文标题】:when i try to display 3 records from database in single textbox only the last record is displayed and not the first two in asp.net empty framework 【发布时间】:2021-12-11 17:45:11 【问题描述】:我在 ms 访问中有一个名为 tbl_cmpjobdet 的表,其中存储了作业的详细信息。当用户想要搜索工作时,应向他显示所有可用的工作。我已经使用 oledbdatareader 检索了数据库记录,然后将它们用于循环尝试在文本框中显示此数据。我试图在 4 个文本框中显示 4 件事,即公司名称、城市、州和工作。当程序运行时,值被正确检索,但只有最后一条记录显示在屏幕上,而不是以前的记录。我对所有记录使用相同的四个文本框。我想显示所有记录。这是我正在尝试的代码。这里我声明了文本框
<div>
<ul style="list-style-type:none">
<li>
<asp:TextBox ID="txt_cname" runat="server" BorderStyle="None"></asp:TextBox>
</li>
<li>
<asp:TextBox ID="txt_city" runat="server" BorderStyle="None"></asp:TextBox>
</li>
<li>
<asp:TextBox ID="txt_cstate" runat="server" BorderStyle="None"></asp:TextBox>
</li>
<li>
<asp:TextBox ID="txt_cjob" runat="server" BorderStyle="None"></asp:TextBox>
</li>
<hr />
</ul>
</div>
这是我从数据库中检索记录并在文本框中显示它们的地方
con.Open();
OleDbCommand cmd = new OleDbCommand("Select count(*) from tbl_cmpjobdet");
OleDbCommand md = new OleDbCommand("select * from tbl_cmpjobdet");
cmd.Connection = con;
md.Connection = con;
OleDbDataReader dr = md.ExecuteReader();
int i = Convert.ToInt32(cmd.ExecuteScalar())
for(int j=0;j<=i;j++)
while(dr.Read())
cname = dr["cmp_name"].ToString();
city = dr["cmp_city"].ToString();
state = dr["cmp_state"].ToString();
jname = dr["job_name"].ToString();
txt_cname.Text = cname;
txt_city.Text = city;
txt_cstate.Text = state;
txt_cjob.Text = jname;
现在循环运行正常,值也被传递到文本框,但屏幕上显示的值只是最后一条记录。
【问题讨论】:
您每次都重置文本框的值,而不是追加新值! 是的,但是我如何附加,因为首先显示一个公司的所有详细信息,然后第二个公司的详细信息进来,然后我想单独显示@phuzi 不要只使用“=”,而是使用“+=”。这应该是你追加东西的方式。 您可能需要一个重复器,以便您可以为每条记录重复您的文本框。 @AndrejaZivanovic 我确实尝试过,但是所有公司名称都在该文本框中的一行中出现 【参考方案1】:听起来您希望能够在自己的一组文本框中显示所有记录。要使用 WebForms 执行此操作,您需要 asp:Repeater
警告 - 我已经有一段时间没有使用 WebForms 了,所以这可能无法开箱即用
首先,更新您的表单以使用中继器
<asp:Repeater runast="server" id="Repeater">
<ItemTemplate>
<div>
<ul style="list-style-type:none">
<li>
<%# Eval("cmp_name") %>
</li>
<li>
<%# Eval("cmp_city") %>
</li>
<li>
<%# Eval("cmp_state") %>
</li>
<li>
<%# Eval("job_name") %>
</li>
<hr />
</ul>
</div>
</ItemTemplate>
</asp:Repeater>
这应该为每条记录重复列表。
现在您需要将数据绑定到中继器
OleDbDataReader dr = md.ExecuteReader();
Repeater.DataSource = dr;
Repeater.DataBind();
【讨论】:
【参考方案2】:嗯,它的工作原理与 Access 非常相似。但是如果你只是在页面上放置一些文本框,那么你可以设置这些文本框的值。
但是,与 Access 或任何桌面软件一样,这些控件仅显示一个值。
因为你有重复数据?那么最好采用某种支持“多”行数据的网格或表格类控件。
我建议你试试这样的网格视图:
<asp:GridView ID="GridView1" runat="server">
</asp:GridView>
现在,这是加载上述内容的代码:
protected void Page_Load(object sender, EventArgs e)
if (!IsPostBack)
LoadGrid();
void LoadGrid()
using (OleDbConnection conn = new OleDbConnection(Properties.Settings.Default.AccessDB))
using (OleDbCommand cmd = new OleDbCommand("SELECT * fromo tbl_cpmjobdet", conn))
conn.Open();
GridView1.DataSource = cmd.ExecuteReader();
GridView1.DataBind();
现在,我没有你的数据,但是这样说:
protected void Page_Load(object sender, EventArgs e)
if (!IsPostBack)
LoadGrid();
void LoadGrid()
using (OleDbConnection conn = new OleDbConnection(Properties.Settings.Default.AccessDB))
string strSQL = "SELECT ID, FirstName, LastName, HotelName, Description FROM tblHotels" +
"ORDER BY HotelName";
using (OleDbCommand cmd = new OleDbCommand(strSQL, conn))
conn.Open();
GridView1.DataSource = cmd.ExecuteReader();
GridView1.DataBind();
我们现在得到这个作为输出:
所以像文本框这样的控件可以有一个值。
但如果你想要“很多”,那么使用网格控件。如果您不寻找类似输出的网格(表格),也可以使用中继器。
【讨论】:
以上是关于当我尝试在单个文本框中显示数据库中的 3 条记录时,仅显示最后一条记录,而不是 asp.net 空框架中的前两条的主要内容,如果未能解决你的问题,请参考以下文章