根据数据库中的数据更改gridview

Change gridview based on data from database

我正在使用 ASP.NET 和 C# 开发一个网站。我有一个当前包含两个 Gridview 的页面。第一个网格用于员工,第二个网格用于管理人员。我根据谁登录来拆分数据。如果经理登录 he/she 应该看到两个网格,如果员工登录 he/she 应该只看到一个网格。我设法获得了两个网格,但似乎无法弄清楚如何相应地显示它们。我的代码如下;

public List<MyClass> GetData()
{
    string userName = HttpContext.Current.User.Identity.Name;

    List<MyClass> myList = new List<MyClass>();

    using(SqlConnection connection = new SqlConnection(Common.ConnectionString))
    {
        using (SqlCommand cmd = new SqlCommand("MyProcedure", connection))
        {
            cmd.CommandType = CommandType.StoredProcedure;
            cmd.Parameters.Add("@UserName", SqlDbType.VarChar).Value = userName;
            connection.Open();
            using(SqlDataReader reader = cmd.ExecuteReader())
            {
                while(reader.Read())
                {
                    MyClass mc = new MyClass();

                    mc.Id = reader["Id"].ToString();
                    mc.Name = reader["Name"].ToString();
                    myList.Add(mc);
                }
            }
        }
    }
    return myList;
}

为了在页面上绑定数据,我有自己的网格

MyClass list = new MyClass();

//Employee Grid  
GridView1.DataSource = list.GetData();
GridView1.DataBind();   

//Manager Grid
GridView2.DataSource = list.GetData();
GridView2.DataBind();   

我的 PROCEDURE 非常简单,它检查它是经理还是员工以及 returns 相关数据。该程序已经过测试,因此可以正常工作。

我似乎无法弄清楚如何为经理和员工显示网格。我需要两种不同的功能吗?

在此先感谢您的帮助和支持

对于您当前的实施,两个网格将绑定相同的数据,因此对于两个不同的结果(员工和经理),您可以:-

  1. 编写两个 SP(每个 SP 单独获取员工和经理记录)并单独调用它们。

  2. (Preferred) 从您现有的 SP return 两个结果集(一个用于员工& 一个用于经理),您还可以设置一个 output parameter 来检查登录用户是经理还是员工。然后在相同的方法中,而不是 returning List<MyClass> 你可以 return 一个自定义类型,它既有员工列表也有经理列表,如下所示:-

    public class EmployeeAndManager
    {
        public List<Employee> employees { get; set; }
        public List<Employee> manager { get; set; }
    }
    

最后在您的方法中,使用 NextResult 方法获取两个结果,如下所示:-

public EmployeeAndManager GetData()
{
    //Your Rest Code
     EmployeeAndManager em = new EmployeeAndManager();
     List<MyClass> emp = new List<MyClss>();
     List<MyClass> man= new List<MyClss>();
     while(reader.Read())
     {
         MyClass mc = new MyClass();
         mc.Id = reader["Id"].ToString();
         mc.Name = reader["Name"].ToString();
         emp.Add(mc);
     }
    reader.NextResult();
    while(reader.Read())
     {
         MyClass mc = new MyClass();
         mc.Id = reader["Id"].ToString();
         mc.Name = reader["Name"].ToString();
         man.Add(mc);
     }
    em.employees = emp;
    em.manager= man;
    return em;
  }