我的HTML中有ListView
和ObjectDataSource
,如下所示:
<asp:ListView ID="ltwEventos" DataSourceID="odsEventos" runat="server">
<EmptyDataTemplate>
// Some HTML.
</EmptyDataTemplate>
<ItemTemplate>
// Some HTML.
</ItemTemplate>
</asp:ListView>
<asp:ObjectDataSource ID="odsEventos" EnablePaging="true"
TypeName="Fotografo2016._Default" SelectMethod="ObterEventos"
SelectCountMethod="ObterTotalEventos" MaximumRowsParameterName="RegistrosPorPagina"
StartRowIndexParameterName="IndiceInicial" runat="server">
<SelectParameters>
<asp:Parameter Name="IDFotografo" Type="Int32" DefaultValue="140" />
<asp:Parameter Name="Descricao" Type="String" />
</SelectParameters>
</asp:ObjectDataSource>
我正在使用我的数据库的前10项填充ListView
(使用ItemDataBound
事件)。这很好。
但是,当用户点击某个按钮时,我想用后面的10个项目(在后面的代码中)更新ListView
,并在页面中显示这20个项目。等等,每当他点击该按钮时,就会再添加10个项目。
我不想再从我的数据库中选择所有项目,我只是想每次都带上新的10个项目并将它们添加到ListView
。
我知道我可以使用JavaScript来执行此操作(使用Ajax调用),但我想是否可以用其他方式执行此操作。
我已尝试过上述代码,但此新项目未显示在页面中。我对这些组件不太熟悉,所以我不知道该怎么做。
Private Sub btnBuscaHeader_Click(sender As Object, e As EventArgs) Handles btnBuscaHeader.Click
Dim Test As New ListViewDataItem(Me.ltwEventos.Items.Count, Me.ltwEventos.Items.Count)
Test.DataItem = "Teste"
Me.ltwEventos.Items.Add(Test)
End Sub
是否可以使用此结构来实现?
PS:我使用VB,但答案也可能是C#代码。
答案 0 :(得分:0)
您可以使用类似ROW_NUMBER(MSSQL SERVER;对于其他数据库,请参阅等效函数)的查询,您可以在其中确定要返回的行,从而阻止记录您已查阅过的查询。
参见示例拾取数字50和60之间的线:
USE AdventureWorks2012;
GO
WITH OrderedOrders AS
(
SELECT SalesOrderID, OrderDate,
ROW_NUMBER() OVER (ORDER BY OrderDate) AS RowNumber
FROM Sales.SalesOrderHeader
)
SELECT SalesOrderID, OrderDate, RowNumber
FROM OrderedOrders
WHERE RowNumber BETWEEN 50 AND 60;
根据具体情况,使用Take()和Skip()Linq方法也可能有所帮助......
答案 1 :(得分:0)
此代码举例说明了我在上一个答案中所做的评论:
public partial class _Default : Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void BtnAdd_Click(object sender, EventArgs e)
{
List<Person> list = new List<Person>() { new Person("John"), new Person("Louis"), new Person("Walter") };
Session["DataSource"] = list;
UpdateListView();
}
protected void BtnUpdate_Click(object sender, EventArgs e)
{
List<Person> list = (List<Person>)Session["DataSource"];
list.Add(new Person("NewPerson"));
Session["DataSource"] = list;
UpdateListView();
}
private void UpdateListView()
{
ListView1.DataSource = (List<Person>)Session["DataSource"];
ListView1.DataBind();
}
}
public class Person
{
string _name;
public string Name
{
get { return _name; }
set { _name = value; }
}
public Person(string nome)
{
_name = nome;
}
}