如何从 SQL 中检索多个值到标签
How to retrieve multiple values from SQL to label
我想从我的 SQL 数据库中检索多个值到单个 aspx 页面上的多个标签。现在发生的事情是,我成功地从第一行中检索了值,但是当涉及到第二行时,它会不断重复第一行中的值。
这是我用来 select 来自数据库的值的代码。任何人都可以帮我解决这个问题以检索其他行吗?
页面隐藏代码:
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>
首先,您需要获得要分配给的控件的正确索引:
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]
- 有一个中继器或一个网格视图,它代表您的实体列表,并定义带有必要标签的模板。然后您可以将数据从您的数据库绑定到它们,这将导致更漂亮、更易于维护的解决方案,并且更不容易出错。不过这确实是一个单独的主题,不太适合这个问题,请在线查找教程。
如果您想显示每行的所有值并将它们分配到标签中。您可以为每一行动态创建这些标签并将它们分配给页面:
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);
[更新] 此代码将有助于为每一行生成标签,但是如果您想要映射之前创建的标签,那么 Andrei 的 方法应该有效!
[编辑] [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();
}
}
我想从我的 SQL 数据库中检索多个值到单个 aspx 页面上的多个标签。现在发生的事情是,我成功地从第一行中检索了值,但是当涉及到第二行时,它会不断重复第一行中的值。
这是我用来 select 来自数据库的值的代码。任何人都可以帮我解决这个问题以检索其他行吗?
页面隐藏代码:
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>
首先,您需要获得要分配给的控件的正确索引:
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]
- 有一个中继器或一个网格视图,它代表您的实体列表,并定义带有必要标签的模板。然后您可以将数据从您的数据库绑定到它们,这将导致更漂亮、更易于维护的解决方案,并且更不容易出错。不过这确实是一个单独的主题,不太适合这个问题,请在线查找教程。
如果您想显示每行的所有值并将它们分配到标签中。您可以为每一行动态创建这些标签并将它们分配给页面:
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);
[更新] 此代码将有助于为每一行生成标签,但是如果您想要映射之前创建的标签,那么 Andrei 的 方法应该有效!
[编辑] [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();
}
}