我试图在div中而不是在表中显示一行数据(如果可能)。所以我想控制一行中的每个td元素,但是没有涉及到的表,所以foreach行我将元素内联并放在div中,所以我可以在一些java脚本动画中使用它们。
<asp:sqldatasource ID="dsEvents" runat="server" ConnectionString="<%$ ConnectionStrings:Maryville %>" runat="server"
SelectCommand="SELECT e.* FROM rew_Event e INNER JOIN rew_Timeframe t ON t.timeframeID = e.timeframeID WHERE e.dateStart >= @today AND e.active = 1 ORDER BY e.dateStart ASC">
<SelectParameters>
<asp:ControlParameter ControlID="hidDateTime" Type="DateTime" Name="today" />
</SelectParameters>
</asp:sqldatasource>
因此对于这个源我想将每一行显示为div,我根本不想处理表。这可能吗?我知道在PHP中我可以通过创建for或foreach循环来查询然后回显我在页面任何地方选择的每个数据。我怎么能在这里做同样的事情呢?
谢谢!
答案 0 :(得分:0)
您可以使用Repeater,如下所示:
<asp:Repeater ID="test" runat="server">
<HeaderTemplate>
<div class="rowcontainer">
</HeaderTemplate>
<ItemTemplate>
<div style="float:left;">
<%#Eval("Column1") %>
</div>
</ItemTemplate>
<FooterTemplate>
</div>
</FooterTemplate>
</asp:Repeater>
答案 1 :(得分:0)
不幸的是,SqlDataSource控件是设计的,可以通过DataSourceId属性处理数据绑定控件......这实际上是什么让它变得如此简单易用! SqlDataSource可以与最少的代码一起使用,因为只有在页面的预渲染生命周期期间存在具有等于SqlDataSource ID的DataSourceId属性的数据绑定控件时,才会检索其相应的数据。您可以在MSDN SqlDataSource Control Overview page上阅读更多内容。
当我希望 reeeally 内联我的服务器端代码(例如在自定义div中放置字段值)时,我通常使用以下技术之一:
ONE:使用自定义ItemTemplates创建ASP转发器控件以返回多行数据。
这可能是最简单的实施方法;但由于所有对SQL数据的引用都必须在转发器控件中进行,因此它的实用性有限。但是,如果您希望暂时完成工作,这可能就是您想要的。以下是关于中继器的书签链接:
TWO:引用服务器端函数,使用内联服务器标记返回单行数据或标量值。
恕我直言,在这三种方法中,这一方法提供了服务器端定制,简单性和服务器 - 客户端交互的最佳组合。它很快成为我显示自定义数据的首选方法。我将构建一个例子。我们假设我有一个销售教科书的ASP.NET WebForms网站。在这个网站上,我有一个页面(view.aspx),允许学生查看教科书并联系卖家。在此页面中,我很可能希望显示教科书信息项,例如标题,作者和 ISBN 。教科书信息存储在名为TextbookPostInfo的SQL表或视图中。此表中的每个条目都由其主键postid
标识。 postid
值通过URL参数传递给页面。
我将首先构建一个TextBookPost类来包含信息项......
Imports Microsoft.VisualBasic
Imports System.Data
Imports System.Data.SqlClient
Namespace MyClassLibrary
Public Class TextBookPost
Sub New(ByVal post_id As Guid)
Dim queryString As String = "select * from PostInfoView where postid = @postid"
Using cmd As New SqlCommand(queryString, New SqlConnection(ConfigurationManager.ConnectionStrings("MyDbConnection").ConnectionString))
cmd.Parameters.AddWithValue("@postid", post_id).SqlDbType = SqlDbType.UniqueIdentifier
Dim rdr As SqlDataReader
Try
cmd.Connection.Open()
rdr = cmd.ExecuteReader
While rdr.Read
_postid = rdr("postid")
_author = rdr("author")
_isbn = rdr("isbn")
_title = rdr("title")
End While
Catch ex As Exception
'INSERT ERROR-HANDLING CODE'
cmd.Connection.Close()
End Try
cmd.Connection.Close()
End Using
End Sub
Private _postid As Guid
''' <summary>
''' Gets the postid.
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Public ReadOnly Property postid As Guid
Get
Return _postid
End Get
End Property
Private _title As String
''' <summary>
''' Gets the title of the textbook for this post.
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Public ReadOnly Property title As String
Get
Return _title
End Get
End Property
Private _isbn As String
''' <summary>
''' Gets the isbn of the textbook for this post.
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Public ReadOnly Property isbn As String
Get
Return _isbn
End Get
End Property
Private _author As String
''' <summary>
''' Gets the author of the textbook for this post.
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Public ReadOnly Property author As String
Get
Return _author
End Get
End Property
End Class
End Namespace
现在我的信息项有一个很小的容器,让我们在page_load中添加一些代码,使用给定的URL参数postid
来检索这些信息。
View.aspx.vb(我的代码隐藏文件)......
Imports System.Data.SqlClient
Imports System.Data
Imports MyClassLibrary
Partial Class view
Inherits System.Web.UI.Page
Private _thispost As TextBookPost = Nothing
''' <summary>
''' Gets the information for the current post.
''' </summary>
''' <value></value>
''' <returns></returns>
''' <remarks></remarks>
Public ReadOnly Property thispost As TextBookPost
Get
Return _thispost
End Get
End Property
Protected Sub Page_Load(sender As Object, e As System.EventArgs) Handles Me.Load
If Not IsPostBack Then
If Request.QueryString("postid") Is Nothing Then GoTo NoPostId
Dim postid As Guid = Guid.Parse(Request.QueryString("postid").ToString)
Dim tb As New TextBookPost(postid)
_thispost = tb
End If
Exit Sub
NoPostId:
'INSERT CODE TO HANDLE INVALID POST ID'
End Sub
所以现在我有一个漂亮而又整洁的textbookpost对象作为变量存储在我的代码隐藏中。现在,我可以在创建页面标记时由我自己或(如果您正在管理团队开发项目)访问您的字体结束工程师/开发人员。
View.aspx
<HTML>
<Body>
<form id="form1" runat="server">
<div class="post-info-container">
<!-- ========================================= -->
<!-- Title -->
<!-- ========================================= -->
<div class="post-info-item-title post-info-item">
<span class="post-info-item-label-title post-info-item-label item-label">
Title
</span>
<span class="post-info-item-text-title post-info-item-text item-text">
<asp:Label runat="server" ID="titlelabel">
<%= thispost.title%>
</asp:Label>
</span>
</div>
<!-- ========================================= -->
<!-- Author -->
<!-- ========================================= -->
<div class="post-info-item-author post-info-item">
<span class="post-info-item-label-author post-info-item-label item-label">
Author
</span>
<span class="post-info-item-text-author post-info-item-text item-text">
<asp:Label runat="server" ID="authorlabel">
<%= thispost.author%>
</asp:Label>
</span>
</div>
<!-- ========================================= -->
<!-- ISBN -->
<!-- ========================================= -->
<div class="post-info-item-isbn post-info-item">
<span class="post-info-item-label-isbn post-info-item-label item-label">
ISBN
</span>
<span class="post-info-item-text-isbn post-info-item-text item-text">
<asp:Label runat="server" ID="isbnlabel">
<%= thispost.isbn%>
</asp:Label>
</span>
</div>
</div>
</form>
</Body>
</HTML>
THREE:使用jQuery $ .Get()或$ .ajax调用构建Web API并检索数据。
当您希望以正确的方式执行部分页面更新时(即,不使用更新面板),此方法非常有效。仅供参考:如果您仍在使用更新面板,请注意本节。实现MVC比我们之前的例子稍微复杂一点,可能超出了这个答案的范围,所以这里有一些非常有用的链接,我已经加入了书签:
最后一个链接解释了如何执行 post 操作(而不是 get 操作),但它包含大量代码示例和有关如何进行的讨论这行得通。整个方法非常适合自定义,因为您可以使用javascript自由地操作数据,但它有一些值得一提的缺点:
这三种方法都很重要,但它们都是情境性的。您只需要确定哪种方法最适合您的目标。另一个有用的技术是创建ASP.NET自定义服务器控件,但这有点复杂,通常涉及创建单独的Visual Studio项目。无论如何......我希望这会有所帮助。