【问题标题】:How to display list<> in gridview ASP.NET C#如何在gridview ASP.NET C#中显示列表<>
【发布时间】:2017-09-27 20:15:19
【问题描述】:

我在 asp.net c# 中有 DAL 代码,用于在 DB sql server 中选择我的 table_users 的所有用户。

我的 DAL:

public class Users
{
    private string _UserName;

    public string UserName
    {
        get { return _UserName; }
        set { _UserName = value; }
    }
    private string _Pass;

    public string Pass
    {
        get { return _Pass; }
        set { _Pass = value; }
    }
    private string _Name;

    public string Name
    {
        get { return _Name; }
        set { _Name = value; }
    }
    private string _Family;

    public string Family
    {
        get { return _Family; }
        set { _Family = value; }
    }

    private string _Mobile;

    public string Mobile
    {
        get { return _Mobile; }
        set { _Mobile = value; }
    }
}

public List<Users> GetAllUsers()
{
    List<Users> usersList = null;

    using (DataTable table = SqlDBHelper.ExecuteSelectCommand("GetAllUsers", CommandType.StoredProcedure))
    {
        if (table.Rows.Count > 0)
        {
            usersList = new List<Users>();

            foreach (DataRow row in table.Rows)
            {
                Users user = new Users();

                user.UserName = table.Rows[0]["UserName"].ToString();
                user.Pass = table.Rows[0]["Pass"].ToString();
                user.Name = table.Rows[0]["Name"].ToString();
                user.Family = table.Rows[0]["Family"].ToString();
                user.Mobile = table.Rows[0]["Mobile"].ToString();

                usersList.Add(user);
            }
        }
    }

    return usersList;
}

还有我的 BLL 调用代码:

public List<Users> GetAllUsers()
{
    return userDB.GetAllUsers();
}

现在我想调用在网格视图中显示数据的方法。

public List<Users> usersList = null;
UsersHadler userDB = new UsersHadler();
usersList = userDB.GetAllUsers();

foreach (Users user1 in usersList)
{
    GridView1.DataSource = usersList;
    GridView1.DataBind();
}

我在数据库中有 3 个用户。uer1 和 user2 和 user3 问题是我在 gridview 3 行中看到一个 user1。 用户1 用户1 用户1 怎么了。? 谢谢回复

`

【问题讨论】:

  • 你真的需要更好地理解循环。看看你在 DAL 中循环的内容。您正在循环表中的行,但是在每次迭代中,您将返回到表中的第 0 行。您应该引用循环中声明的行。这与 Jaquez 在将 usersList 重复绑定到 GridView 时向您指出的问题非常相似。
  • 安全警报!您是否将明文密码存储在数据库中?这是严重的安全违规行为!密码应该是单向散列和加盐的。此外,您的 Users 类应该只称为 User 代表单个用户,而不是集合。你应该看看auto properties,它可以减少不必要的代码。
  • 嗨,谢谢。回复。特别是为了您的安全警报!

标签: c# asp.net webforms


【解决方案1】:

摆脱foreach 循环。您将为每个用户浏览一次usersList,并将整个列表绑定到GridView1。您只需执行一次。

public List<Users> usersList = null;
UsersHadler userDB = new UsersHadler();
usersList = userDB.GetAllUsers();
GridView1.DataSource = usersList;
GridView1.DataBind();

您可能还想从 BLL 调用 GetAllUsers 方法,而不是直接在视图中从 DAL 调用该方法。否则,BLL 的意义何在?

您的问题出在 GetAllUsers 的 DAL 版本中。您仅在 foreach 循环中引用 Rows[0]

user.UserName = table.Rows[0]["UserName"].ToString();
user.Pass = table.Rows[0]["Pass"].ToString();
user.Name = table.Rows[0]["Name"].ToString();
user.Family = table.Rows[0]["Family"].ToString();
user.Mobile = table.Rows[0]["Mobile"].ToString();

GetAllUsers 的DAL 副本中的foreach 循环替换为:

foreach (DataRow row in table.Rows)
{
    Users user = new Users();

    user.UserName = row["UserName"].ToString();
    user.Pass = row["Pass"].ToString();
    user.Name = row["Name"].ToString();
    user.Family = row["Family"].ToString();
    user.Mobile = row["Mobile"].ToString();

    usersList.Add(user);
}

【讨论】:

  • 你仍然得到相同的结果吗?
  • @mason 你从我的键盘上偷了字。
  • 好吧,从技术上讲,你对我这样做了。我的答案全部输入了,但你得到的更快。
  • 我该怎么办?
  • 对不起。我英语说得不好。
猜你喜欢
  • 2015-09-17
  • 1970-01-01
  • 1970-01-01
  • 2021-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-04
  • 2017-11-05
相关资源
最近更新 更多