嗯,这取决于。通常为了显示数据,我会说一个中继器,或者说一个数据列表控件。
我什至使用向导创建带有字段的控件,然后删除说向导创建的数据源。
所以,假设我们有这个标记:
<asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>
<div style="border-style:solid;color:black;width:300px;float:left">
<div style="padding:5px;text-align:right">
Hotel Name:
<asp:TextBox ID="txtHotelName" runat="server" Text ='<%# Eval("HotelName") %>' />
<br />
First Name:
<asp:TextBox ID="txtFirst" runat="server" Text ='<%# Eval("FirstName") %>' />
<br />
Last Name:
<asp:TextBox ID="txtLast" runat="server" Text ='<%# Eval("LastName") %>' />
<br />
City:
<asp:TextBox ID="txtCity" runat="server" Text ='<%# Eval("City") %>' />
<br />
Active:
<asp:CheckBox ID="chkActive" runat="server" Checked = '<%# Eval("Active") %>'/>
<asp:HiddenField ID="PK" runat="server" Value = '<%# Eval("ID") %>'/>
<asp:Button ID="cmdDelete" runat="server" Text="Delete" style="margin-left:20px"
OnClick="cmdDelete_Click"/>
</div>
</div>
<div style="clear:both;height:4px"></div>
</ItemTemplate>
</asp:Repeater>
不,不是 20 个字段,但如果我在创建过程中使用向导选择所有 20 列,我至少不必输入以上内容 - 但只需在使用向导创建该转发器后“调整”它,或数据列表。
好的,现在代码来填充上面的内容。
看起来像这样:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
LoadData();
}
}
public void LoadData()
{
string strSQL = "SELECT * FROM tblHotels WHERE ID = 23 ORDER BY HotelName";
using (SqlCommand cmdSQL = new SqlCommand(strSQL,
new SqlConnection(Properties.Settings.Default.TEST4)))
{
cmdSQL.Connection.Open();
Repeater1.DataSource = cmdSQL.ExecuteReader();
Repeater1.DataBind();
}
}
我们现在看到了:
另一方面,如果我使用这个 SQL:
string strSQL = "SELECT TOP 4 * FROM tblHotels ORDER BY HotelName";
那么我现在明白了:
因此,如您所见,显示我重复的“事物”中的 1 个或 20 个不再起作用。我可以说让重复遍历整个页面,我现在有了一个类似卡片视图的系统。
您当然也可以只编写代码,然后将值放入文本框中。所以不用说中继器控件,只有他的文本框,那么这将起作用:
string strSQL = "SELECT * FROM tblHotels ORDER BY HotelName";
using (SqlCommand cmdSQL = new SqlCommand(strSQL,
new SqlConnection(Properties.Settings.Default.TEST4)))
{
DataTable rstData = new DataTable();
cmdSQL.Connection.Open();
rstData.Load(cmdSQL.ExecuteReader());
DataRow OneRow = rstData.Rows[0];
txtHotelName.Text = OneRow["HotelName"].ToString();
txtFirst.Text = OneRow["FirstName"].ToString();
txtLast.Text = OneRow["LastName"].ToString();
txtCity.Text = OneRow["City"].ToString();
chkActive.Checked = (bool)OneRow["Active"];
}
所以你在这里有很多选择。当然,人们经常会引入一个模型框架(比如旧的数据集,或者现在的 EF(实体框架)。这会给你一个代码中的模型,因此你经常不记得字段名称,而你得到/拥有您和数据库之间的抽象层。
而且大部分数据重复控件都乐于使用 EF 数据,甚至像上面展示的那样直接使用数据表。