用户详细信息不显示使用分页

时间:2017-11-01 19:31:31

标签: c# winforms list linq

我将使用分页在 DataGridView 中显示用户详细信息,并且几乎已完成使用它。问题是,当我在LINQ中使用跳过接受时,它不会显示任何数据,但如果没有,则显示如下:

grdUserDetails.DataSource = aUserDetail; //shows list of user details
grdUserDetails.DataSource = aUserDetail.Skip(startRow).Take(pageSize); //Doesn't show anything

这是我到目前为止尝试过的代码:

public int pageSize = 1;
public Users()
{
    InitializeComponent();
    BindDataGridView(1);
}

private void BindDataGridView(int pageIndex)
{
   List<UserDetails> aUserDetail = null;

   aUserDetail = GetUserDetails();

   totalRecordCount = aUserDetail.Count;
   int startRow = pageIndex * pageSize;

   grdUserDetails.DataSource = aUserDetail.Skip(startRow).Take(pageSize); //Here is the main issue that I am stuck with
   BindPager(totalRecordCount, pageIndex);
}

private void BindPager(int recordCount, int currentPage)
{
   double getPageCount = (double)((decimal)totalRecordCount / (decimal)pageSize);
   int pageCount = (int)Math.Ceiling(getPageCount);

   List<ListItem> lstItem = new List<ListItem>();

   if (currentPage > 1)
   {
      lstItem.Add(new ListItem { Text = "First", Value = "1" });
   }

   if (currentPage > 1)
   {
      lstItem.Add(new ListItem { Text = "<<", Value = (currentPage - 1).ToString() });
   }

   for (int i = 1; i <= recordCount; i++)
   {
      lstItem.Add(new ListItem { Text = i.ToString(), Value = i.ToString(), Selected = i == currentPage });
   }

   if (currentPage < pageCount)
   {
      lstItem.Add(new ListItem { Text = ">>", Value = (currentPage + 1).ToString() });
   }

   if (currentPage != pageCount)
   {
       lstItem.Add(new ListItem { Text = "Last", Value = pageCount.ToString() });
   }

   plPager.Controls.Clear();

   int count = 0;
   foreach (ListItem lst in lstItem)
   {
      Button btnPage = new Button();
      btnPage.Location = new System.Drawing.Point(38 * count, 6);
      btnPage.Size = new System.Drawing.Size(36, 20);

      btnPage.Name = lst.Value;
      btnPage.Text = lst.Text;

      btnPage.Enabled = !lst.Selected;
      btnPage.Click += new System.EventHandler(this.ListItem_Click);

      plPager.Controls.Add(btnPage);
      count++;
   }
}

private void ListItem_Click(object sender, EventArgs e)
{
   Button btnPager = (sender as Button);
   this.BindDataGridView(int.Parse(btnPager.Name));
}

我为 WinForm 项目使用了两个类。一个是 UserDetails ,另一个是页面,可以使用面板动态绑定控件:

public class ListItem
{
   public string Text { get; set; }
   public string Value { get; set; }
   public bool Selected { get; set; }
}

public class UserDetails
{
   public int Id { get; set; }
   public string Name { get; set; }
}

public List<UserDetails> GetUserDetails()
{
  List<UserDetails> lst = new List<UserDetails>
  {
     new UserDetails { Id = 1001, Name = "John" },
     new UserDetails { Id = 1001, Name = "Jack" } 
  };

  return lst;
}

最后在表单中,我 DataGridView 命名为grdUserDetails,面板plPager显示用户详细信息和分页。我希望,这将是一个愚蠢的错误,错过了这样做的事情。

1 个答案:

答案 0 :(得分:2)

两件事。

1)由于基于零的索引,startRow需要减少一个。

2)您的LINQ需要转换为List&lt;&gt;。

所以,试试这个:

grdUserDetails.DataSource = aUserDetail.Skip(startRow - 1).Take(pageSize).ToList();