【问题标题】:Displaying customers from SQL Server database using datalist control in asp.net在 asp.net 中使用 datalist 控件显示来自 SQL Server 数据库的客户
【发布时间】:2012-03-06 15:55:49
【问题描述】:

我有一个包含 1000 个客户的列表,我通过 asp.net 中的 datalist 控件显示。该列表每页显示一个客户。

我用来绑定数据列表的查询是:

static public DataTable GetAllCustomers()
{
    string sql = "Select * from [Customers]";
    SqlDataAdapter da = new SqlDataAdapter(sql, ConnectionString);
    DataTable dt = new DataTable();
    da.Fill(dt);
    return dt;
}

我想要做的是一旦客户被查看它应该回到列表的底部,这样一旦用户第二次登录,他就不必从头开始查看同一个客户,查看客户应该到1000客户列表的底部,例如如果一旦查看客户1,下一次客户1应该成为1000客户,客户2应该成为客户1,希望它有意义。

对于如何实现此方案以及我必须在数据库和查询中进行哪些更改以实现此目的,我们将不胜感激。

【问题讨论】:

  • 您是否正在更新客户数据?是否有多个人同时查看客户?如果要更新,您可以在查询中添加“最后更新”字段并按此排序 - 任何未更改的内容都会首先出现
  • 每个用户?还是对所有用户都一样?
  • @KAJ Yeh 有多个用户同时登录,大约5个,还有一个可选的更新选项可用
  • 所有用户都应该相同。
  • 如果仅仅查看客户就足以导致他们被推到列表的后面,您可能需要处理 DataList 的 ItemCreated 事件并识别当前项目并进行数据库更新 - 类似上面“最后更新”的想法,但最好命名为“最后查看”

标签: asp.net sql-server database datalist


【解决方案1】:

查看客户时捕获当前日期时间并使用排序,按日期时间升序排序

【讨论】:

  • 我如何知道客户已被查看?
  • 他们可能会从那里选择我们可以捕获的那一行,或者你可以使用 onmouseover 事件
【解决方案2】:

在同一个表中创建一个新列。每当您查看客户时,都会使用 .this 新创建的列的当前日期和时间更新客户

ALTER TABLE YourTableName 
ADD NewColumnName DATETIME DEFAULT getdate()

新创建的列应包含最初按当前日期和时间更新的所有值。这意味着该列的默认值为GetDate()

当您从数据库中获取所有记录时,按列对其进行排序。因此,您每次都会在顶部有未查看的客户...

static public DataTable GetAllCustomers()
{
    string sql = "Select * from [Customers]";
    using (SqlDataAdapter da = new SqlDataAdapter(sql, ConnectionString))
    {
        using (DataTable dt = new DataTable())
        {
            da.Fill(dt);
            return dt;
        }
    }
}

希望对你有所帮助...

【讨论】:

    【解决方案3】:

    首先,您需要在某个地方记住您显示的最后一个 CustomterID 是什么,以及您的客户的最大行数。

    假设LastCustomerID -> CuLast 和Max rows -> CuMax,那么SQL 可以这样。

    WITH CustomersNewOrder as (
     select *, CustomerID-CuLast as OrderMe from Customers where CustomerID > CuLast
    union
     select *, CustomerID+CuMax as OrderMe from Customers where CustomerID <= CuLast 
    ) select * from CustomersNewOrder order by OrderMe
    

    还有When the CuLast &gt; CuMax then make the CuLast = 0

    我在这里所做的是,最后一个数字是从 0 开始的,而你已经准备好的数字显示在列表的最大值之后。

    这样你不需要更新数据库,并且只需要记住一个数字,你显示的最后一个。

    因为你说你赢了所有用户都一样,我想你只有一个池,那么全局空间上任何地方的静态值都可以完成保持最后一个显示的工作。

    【讨论】:

      猜你喜欢
      • 2019-10-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-21
      • 2010-10-11
      • 1970-01-01
      相关资源
      最近更新 更多