我想从SQL数据库中检索多个值到单个aspx页面上的多个标签。现在发生的事情是,我成功地检索了第一行的值,但是当它到达第二行时,它继续重复第一行的值。
这是我用来从数据库中选择值的代码。任何人都可以帮我解决这个问题以检索其他行吗?
页面后面的代码:
public partial class filmes : System.Web.UI.Page
{
string strConnString = ConfigurationManager.ConnectionStrings["ENTDB"].ConnectionString;
string str;
SqlCommand com;
protected void Page_Load(object sender, EventArgs e)
{
SqlConnection con = new SqlConnection(strConnString);
con.Open();
str = "select * from FilmesSeries order by IDFilmesSeries desc";
com = new SqlCommand(str, con);
SqlDataReader reader = com.ExecuteReader();
int ID=1;
while (reader.Read())
{
ID++;
Label tituloControl= (Label) Page.FindControl("Titulo"+ID);
if(tituloControl!=null)
{
tituloControl.ID=" Titulo"+ID;
tituloControl.Text= reader["Titulo"].ToString();
}
Label GeneroControl= (Label) Page.FindControl("Genero"+ID);
if(GeneroControl!=null)
{
GeneroControl.ID=" Genero"+ID;
GeneroControl.Text= reader["NomeGenero"].ToString();
}
}
reader.Close();
con.Close();
}
}
filmes.aspx页面:
<div class="row">
<div class="col-md-5">
<asp:Label id="Titulo1" runat="server" />
<asp:Label id="Genero1" runat="server" />
</div>
</div>
<hr>
<div class="row">
<div class="col-md-5">
<asp:Label id="Titulo2" runat="server" />
<asp:Label id="Genero2" runat="server" />
</div>
</div>
答案 0 :(得分:1)
首先,您需要获取要分配的正确控件索引:
int i = 1;
while (reader.Read())
{
...
i++;
}
然后您需要从页面中检索这些控件:
int i = 1;
while (reader.Read())
{
Label titleLabel = (Label)this.FindControl("Titulo" + i);
Label genreLabel = (Label)this.FindControl("NomeGenero" + i);
...
i++;
}
最后分配
int i = 1;
while (reader.Read())
{
Label titleLabel = (Label)this.FindControl("Titulo" + i);
Label genreLabel = (Label)this.FindControl("NomeGenero" + i);
titleLabel.Text = reader["Titulo"].ToString();
genreLabel.Text = reader["NomeGenero"].ToString();
i++;
}
请注意,如果您在数据库中说了10个项目,并且页面上只有9对标签(Titulo9
是最后一个,则没有Titulo10
),上面的代码将会失败,所以一定要做一些错误处理。
有很多方法可以优化:
titleLabels[i]
答案 1 :(得分:0)
如果要显示每行的所有值并在标签中指定它们。您可以为每一行动态创建这些标签,并将它们分配给页面:
int ID=1;
while (reader.Read())
{
ID++;
Label TituloLabel= new Label();
TituloLabel.ID=" Titulo"+ID;
TituloLabel.Text= reader["Titulo"].ToString();
Label GeneroLabel= new Label();
GeneroLabel.ID=" Genero"+ID;
GeneroLabel.Text= reader["NomeGenero"].ToString();
Page.Controls.Add(TituloLabel);
Page.Controls.Add(GeneroLabel);
}
[编辑] 将控件绑定到页面上的某个控件。您可以通过id获得该控件。例如,假设您有一个div例如:
<div id="placeHolder" runat="server"></div>
以下代码只需找到div
:
Page.FindControl("placeHolder").Controls.Add(TituloLabel);
Page.FindControl("placeHolder").Controls.Add(GeneroLabel);
[更新] 此代码有助于为每一行生成标签,但是如果您想要映射以前创建的标签,那么安德烈的方法应该有效!
[编辑] [2] 要映射到硬编码标签:
int ID = 0;
while (reader.Read())
{
ID++;
Label tituloControl= (Label) Page.FindControl("Titulo"+ID);
if(tituloControl!=null)
{
tituloControl.Text= reader["Titulo"].ToString();
}
Label GeneroControl= (Label) Page.FindControl("Genero"+ID);
if(GeneroControl!=null)
{
GeneroControl.Text= reader["NomeGenero"].ToString();
}
}