【问题标题】:Making a page where each user has his own information,gridview etc制作一个页面,每个用户都有自己的信息,gridview 等
【发布时间】:2012-06-25 15:37:55
【问题描述】:

用户登录后,我需要一个页面,每个注册用户都有自己的 gridview 和绑定到他的 gridview 的控件。 该页面将包含一个绑定到 gridview 的 sqldatasource。

我想过在数据库中为每个用户创建一个新表并在表单加载中获取用户登录后的用户名,获取表名并将sqldatasource绑定到他的表名和其他控件字段他的表名。

或者还有其他方法吗?

【问题讨论】:

  • 为每个用户创建一个表是不合逻辑的,将所有用户信息保存在一个表中更好更快
  • 是的,但我需要为每个用户提供一个网格视图,并且用户必须在其中添加新行,并且..我在哪里保存它们?
  • 为此,您可以为用户信息制作一个带有用户 ID 的表格,并为用户数据输入另一个表格。并在它们之间建立关系

标签: c# asp.net


【解决方案1】:

您绝对想为每个用户创建一个单独的表。您打算如何将其扩展到多个用户?

用户需要在他们的页面上看到哪些数据?了解 gridview 不必直接映射到数据库表。它可以映射到任何数据集。因此,您可以以一种有意义的方式将数据存储在数据库中(关系实体),然后以一种有意义的方式进行查询和显示。

例如(这是一个人为的例子,因为我们不知道您拥有什么数据),如果您的用户需要查看他们订购的产品列表,那么您就不会创建表格每个用户的产品。您可能会为每个实体(用户、产品、订单等)创建一个表格:

Users
----------
ID
Name
etc.

Products
----------
ID
Name
etc.

Orders
----------
ID
UserID
DateOrdered
etc.

而且由于每个订单都有一个产品列表,并且每个产品都可以包含在多个订单中,因此这是一个多对多的关系。因此,您可以为该关系创建一个链接表:

OrderedProducts
----------
OrderID
ProductID

然后,为了在 UI 中显示,您将查询数据以仅获取该用户订购的产品:

SELECT DISTINCT
  Products.ID,
  Products.Name,
  Orders.OrderedDate
FROM
  Users
  INNER JOIN Orders ON Users.ID = Orders.UserID
  INNER JOIN OrderedProducts ON Orders.ID = OrderedProducts.OrderID
  INNER JOIN Products ON OrderedProducts.ProductID = Products.ID
WHERE
  Users.ID = @userID

这应该会为您提供该用户订购的不同产品以及订购时间的列表。 (请注意,这段代码是徒手编写的,我没有方便的数据库来测试它。)

因此每个用户都会看到自己的特定信息。

您希望确保您的数据以可用的关系方式建模。定义您的实体(通常是您在数据中表示的真实事物)并定义表来表示这些实体。以自然的方式将它们联系在一起。关系数据库在处理针对定义明确的数据的复杂查询方面非常出色。不要试图从用户的角度围绕显示的性质来设计数据库,而是围绕所存储信息的性质来设计数据库。

【讨论】:

  • 嗯,用户正在gridview中添加“产品”信息。
  • @Jax:没关系。不要将其视为将完整记录添加到表中。在这个人为的例子中,用户正在做的是“订购产品”。当他们提交订单表单时,代码会将其转换为新的 Orders 记录和新的 OrderedProducts 记录。它将所有相关信息(例如下订单的日期时间......用户没有手动提供)到相关表格并刷新页面以显示新状态的信息。
  • 好的,但是我做表之后,我应该如何绑定登录用户的信息
  • @Jax:有很多很多方法可以做到这一点。您通常如何从数据库中获取数据并将其显示给用户?这个问题没有具体说明,至少没有任何代码。通常,您会从应用程序的身份验证中获取用户的 ID(但是您在应用程序中跟踪用户)并将该值作为参数传递给查询。然后,您将使用您喜欢的任何技术来显示结果以显示数据。
【解决方案2】:

您当然不需要为每个用户使用单独的表!

您为什么不向您的一个表中添加一个额外的来存储用户名。这样,每条记录都被标记为属于特定用户。读取登录用户的数据只是表上简单的Where 子句。

【讨论】:

  • 是的,但我需要为每个用户提供一个网格视图,用户将在其中添加新行,并且..我在哪里保存它们?这就是我说单独表格的原因
  • 您将它们保存在同一个表中并通过设置此附加列值来保存用户名来标记它们。
【解决方案3】:

不,那不对, 您不能为每个用户创建一个表。想想如果您有 10,000 个用户,而不是您的数据库包含 10,000 个用户。

您只需创建一个保存所有用户信息的表。 您必须将用户名或电子邮件等身份保存到数据库中,并且 当用户通过他的用户名或电子邮件登录到您的应用程序时,将根据用户名或电子邮件从表中获取信息并设置为 gridview。

希望对你有帮助...

【讨论】:

    【解决方案4】:

    为每个用户创建一个表是不合逻辑的,将所有用户信息保存在一个表中更好更快 为此,您可以使用用户 id 为用户信息创建一个表,为用户数据输入另一个表。并在它们之间建立关系

    【讨论】:

    • 嗯,一张表,上面有用户 id 、 username 、 password 等...,+ gridview 列?
    • 是的用户信息表,如 userid,userbname,pass ,...但额外的信息可以存储在另一个具有相同用户 ID 的表中
    猜你喜欢
    • 2011-03-22
    • 2013-11-25
    • 1970-01-01
    • 1970-01-01
    • 2011-05-21
    • 2012-01-27
    • 1970-01-01
    • 1970-01-01
    • 2014-07-22
    相关资源
    最近更新 更多