网格视图的恒定长度

本文关键字:视图 网格 | 更新日期: 2023-09-27 18:26:39

最近我遇到了一个问题。虽然这个问题不会影响我的流程,但如果解决了,GUI会看起来很好。

问题是…我有一个搜索屏幕,根据搜索条件过滤一些记录,这些记录显示在定义了一些ItemTemplate的网格视图中。我的问题是网格的长度根据网格中记录的数量进行调整。我需要有一个恒定的网格高度,这样我的页面长度在所有搜索中都保持不变。只有当用户希望每页显示10条以上的记录时,才应增加此高度。

请帮我解决这个问题。

网格视图的恒定长度

因为您的要求是:您有一个按钮,上面写着"显示更多",点击后会显示接下来的10行

一种方法是使用objectsList,然后调用List<T>.GetRange()方法。如果您已经在使用LINQ中的Take(n)扩展名,您也可以只返回所需数量的记录。我将CountToDisplay作为一个变量来保存要显示的当前记录数,最初设置为0(零)

GetEmployees方法

protected List<Employee> GetEmployees(int CountToDisplay)
{
List<Employee> employees= new List<employee>();
// Sample code to fill the List. Use the `Take` Extension
    dbDataContext db = new dbDataContext();
    var e= ( from c in db.Employees
            select c ).Take(CountToDisplay);
     //iterate through results and add to List<Employee>
     foreach(var c in e)
     {
         employee emp = new employee { name = c.name, address = c.address };
         employees.Add(emp);
     } 
     return employees;
}

这里Employee是一个类:

public class Employee
{
    public string name;
    public string address;
}

现在是有趣的部分。假设您有一个按钮"显示更多",当单击时会显示接下来的10行。这种情况一直持续到最后。因此,在我的案例中,我使用了一个链接按钮,并在单击时使用服务器方法来加载和刷新网格。

<asp:LinkButton ID="btnShowMore" class="ShowMoreLink" runat="server"
 OnClick="ShowMoreResults"></asp:LinkButton>

这就是ShowMoreResults函数:

private void ShowMoreResults()
        { 
    // Keep incrementing with the Minimum rows to be displayed, 5, 10 ...
    CountToDisplay = CountToDisplay + 
    Convert.ToInt16(WebConfigurationManager.AppSettings["EmpGridViewMinCount"]);
   // finally called the Grid refresh method
    RefreshGrid();    
            }

网格刷新方法:

private void RefreshGrid()
        {
              List<Employee> employees = GetEmployees(CountToDisplay)
              if (employees != null)
                {                    
                  empGrid.DataSource = employees;
                }
// **Hide the ShowMore link in case Count to display exceeds the total record.**
               btnShowMore.Visible = employees.Count > CountToDisplay;
               // Finally bind the GridView
               empGrid.DataBind();
      }