針對圖片列表展示信息,一開始沒有做過相關類似的功能,大多都是以表格行顯示為主,所以剛開始實現這個功能的時候是懵逼的。無從下口。在網上搜索一時半會也沒找到合適的解決方案。大致就是類似於下圖這樣,每條數據上面是圖片,下面是對應的相關信息,在界面上進行一次排列,在界面上分頁展示數據。這是X東的網站部分截圖,大致是這個樣子,只是這里用winform窗體來實現。老大給我提供的思路和源碼,將每條數據用用戶控件自定義設置好,然后將數據遍歷,依次賦值給該控件,給控件設置對應的位置Location 來顯示在Pannel上即可。這里記錄一下
方法體傳入當前頁數據,遍歷每條數據的時候,先賦值圖片、列表信息后,指定用戶控件位置,這里唯一值得說的就是控件位置的賦值,稍稍改進了一下,很簡單,先將根據列表將每條數據的先x,y 的坐標列出來,即很容易的找到規律。我這里默認排版每行顯示5個,最大化后每行可顯示6個,所以是通過面板的寬度除以控件的寬度來獲取每行顯示的個數,根據面板寬度除以控件寬度的余數減去滾動條的寬度(大約是18)的值除以每行顯示的個數來獲取列間距。
//初始化控件大小 mesCon.Size = new Size(149, 222); //控件位置【動態變化】 //列間隔 var temp = this.panel4.Width / 151; var Le = (panel4.Width % 149 - 18) / temp; //設置自定義控件的位置 mesCon.Location = new Point(3 + (i % temp) * (149 + Le), 4 + (i / temp * 228)); //自定義控件添加到 主面板中 panel4.Controls.Add(mesCon);
效果圖這里就不貼上去了,能滿足功能,和上面截圖相似,只是沒這么好看而已。 至於分頁,這里是純手寫的,看起來雖然比較丑陋,但是可以滿足基本需求。
代碼也一並貼上,很簡單,就是對當前頁碼數,總記錄數、當前頁數據的計算
#region 分頁 //上一頁 private void btn_last_Click(object sender, EventArgs e) { //獲取當前是頁的頁數 var intCount = Convert.ToInt32(txt_topage.Text); //獲取每頁顯示多少條 var Pagecount = Convert.ToInt32(cbx_pagecount.Text); if (intCount > 0 && intCount != 1) { var current = (Convert.ToInt32(txt_topage.Text) - 1) * Pagecount; var data = tempData.Skip(current - Pagecount).Take(Pagecount); panel4.Controls.Clear(); //當前頁數、總記錄數、當前頁數據 ShowData(current / Pagecount, tempData.Count, data.ToList()); } } //下一頁 private void btn_next_Click(object sender, EventArgs e) { var intCount = Convert.ToInt32(txt_topage.Text); var Pagecount = Convert.ToInt32(cbx_pagecount.Text); var allPage = tempData.Count % Pagecount == 0 ? tempData.Count / Pagecount : (tempData.Count / Pagecount) + 1; //判斷當前頁是否為最后一頁 if (intCount != allPage) { var current = Convert.ToInt32(txt_topage.Text) * Pagecount; var data = tempData.Skip(current).Take(Pagecount); panel4.Controls.Clear(); ShowData((current / Pagecount) + 1, tempData.Count, data.ToList()); } } //首頁 private void btn_first_Click(object sender, EventArgs e) { var currentPage = Convert.ToInt32(txt_topage.Text); var Pagecount = Convert.ToInt32(cbx_pagecount.Text); if (currentPage != 1) { var data = tempData.Skip(0).Take(Pagecount); panel4.Controls.Clear(); ShowData(1, tempData.Count, data.ToList()); } } //尾頁 private void btn_finish_Click(object sender, EventArgs e) { var currentPage = Convert.ToInt32(txt_topage.Text); var Pagecount = Convert.ToInt32(cbx_pagecount.Text); //總頁數 var allPage = tempData.Count % Pagecount == 0 ? tempData.Count / Pagecount : (tempData.Count / Pagecount) + 1; if (currentPage != allPage) { var data = tempData.Skip((allPage - 1) * Pagecount); panel4.Controls.Clear(); ShowData(allPage, tempData.Count, data.ToList()); } } //跳轉 private void btn_topage_Click(object sender, EventArgs e) { //驗證正則 var reg = @"^[1-9]\d*$"; var Pagecount = Convert.ToInt32(cbx_pagecount.Text); bool bol = Regex.IsMatch(txt_topage.Text, reg); if (bol) { var currPage = Convert.ToInt32(txt_topage.Text); var allPage = tempData.Count % Pagecount == 0 ? tempData.Count / Pagecount : (tempData.Count / Pagecount) + 1; //判斷當前頁是否大於 總共頁數 if (currPage > allPage) { //查詢最后一頁 var data = tempData.Skip((allPage - 1) * Pagecount); panel4.Controls.Clear(); ShowData(allPage, tempData.Count, data.ToList()); } else { //查詢跳轉所在的頁 var data = tempData.Skip((currPage - 1) * Pagecount).Take(Pagecount); panel4.Controls.Clear(); ShowData(currPage, tempData.Count, data.ToList()); } } } #endregion