如何从后面的代码更新ASP.NET ListView?

时间:2016-08-17 17:04:20

标签: c# vb.net listview

我的HTML中有ListViewObjectDataSource,如下所示:

<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#代码。

2 个答案:

答案 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;
        }
    }