当我尝试在单个文本框中显示数据库中的 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
我在 ms 访问中有一个名为 tbl_cmpjobdet 的 table,其中存储了作业的详细信息。当用户想要搜索工作时,应该向他显示所有可用的工作。我已经使用 oledbdatareader 检索了数据库记录,然后将它们用于试图在文本框中显示此数据的循环。我试图在 4 个文本框中显示 4 个内容,即公司名称、城市、州和工作。当程序 运行s 正确检索值时,但只有最后一条记录显示在屏幕上,而不是以前的记录。我为所有记录使用相同的四个文本框。我想显示所有记录。这是我正在尝试的代码。我在这里声明文本框
<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;
}
}
现在循环正确地 运行 并且值也被传递到文本框,但是屏幕上显示的值只是最后一条记录的值。
听起来您希望能够在自己的一组文本框中显示所有记录。要使用 WebForms 执行此操作,您需要 asp:Repeater
警告 - 我已经有一段时间没有使用 WebForms 了,所以这可能无法开箱即用
首先,更新您的表单以使用 Repeater
<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();
好吧,它的工作原理与 Access 非常相似。但是如果你只是在页面上放置一些文本框,那么你可以设置这些文本框的值。
但是,与 Access 或任何桌面软件一样,这些控件仅显示一个值。
因为你有重复数据?那么最好采用某种支持“多”行数据的网格或类似 table 的控件。
我建议您尝试这样的网格视图:
<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();
}
}
}
我们现在得到这个输出:
因此像文本框这样的控件可以有一个值。
但是如果你想要“很多”,那么使用网格控件。如果您不寻找类似输出的网格 (table),您也可以使用中继器。
我在 ms 访问中有一个名为 tbl_cmpjobdet 的 table,其中存储了作业的详细信息。当用户想要搜索工作时,应该向他显示所有可用的工作。我已经使用 oledbdatareader 检索了数据库记录,然后将它们用于试图在文本框中显示此数据的循环。我试图在 4 个文本框中显示 4 个内容,即公司名称、城市、州和工作。当程序 运行s 正确检索值时,但只有最后一条记录显示在屏幕上,而不是以前的记录。我为所有记录使用相同的四个文本框。我想显示所有记录。这是我正在尝试的代码。我在这里声明文本框
<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;
}
}
现在循环正确地 运行 并且值也被传递到文本框,但是屏幕上显示的值只是最后一条记录的值。
听起来您希望能够在自己的一组文本框中显示所有记录。要使用 WebForms 执行此操作,您需要 asp:Repeater
警告 - 我已经有一段时间没有使用 WebForms 了,所以这可能无法开箱即用
首先,更新您的表单以使用 Repeater
<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();
好吧,它的工作原理与 Access 非常相似。但是如果你只是在页面上放置一些文本框,那么你可以设置这些文本框的值。
但是,与 Access 或任何桌面软件一样,这些控件仅显示一个值。
因为你有重复数据?那么最好采用某种支持“多”行数据的网格或类似 table 的控件。
我建议您尝试这样的网格视图:
<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();
}
}
}
我们现在得到这个输出:
因此像文本框这样的控件可以有一个值。
但是如果你想要“很多”,那么使用网格控件。如果您不寻找类似输出的网格 (table),您也可以使用中继器。