Analytics

2017年2月20日 星期一

[GridView]如何 使用GridView做出動態排序與超連結 ( How to use the GridView to make dynamic sorting and hyperlinks)


問題
如何 使用GridView做出動態排序與超連結



解決方法
.aspx
  1. <asp:GridView ID="gvResult" runat="server" OnDataBound="gvContent_DataBound" OnPreRender="gvContent_PreRender"
  2. EmptyDataText="No Data" AllowSorting="True" OnSorting="gvResult_Sorting" CellSpacing="1"
  3. BorderColor="Black" HeaderStyle-BackColor="Blue" HeaderStyle-ForeColor="White">
  4. <RowStyle HorizontalAlign="Center" Wrap="False" BorderWidth="1px" BorderColor="Black" />
  5. <HeaderStyle BackColor="Blue" ForeColor="White" HorizontalAlign="Center" />
  6. </asp:GridView>
.cs
  1. protected void Page_Load(object sender, EventArgs e)
  2. {
  3. if (!IsPostBack)
  4. InitData();
  5. }
  6. private void InitData()
  7. {
  8. DataTable data = get source....
  9. ViewState["data"] = data;
  10. ViewState["dataSortName"] = "";
  11. ViewState["dataSortSeq"] = "";
  12. this.gvResult.DataSource = data;
  13. this.gvResult.DataBind();
  14. }
  15. protected void gvResult_Sorting(object sender, GridViewSortEventArgs e)
  16. {
  17. if (ViewState["dataSortName"].ToString() == e.SortExpression)
  18. if (ViewState["dataSortSeq"].ToString() == "ASC")
  19. ViewState["dataSortSeq"] = "DESC";
  20. else
  21. ViewState["dataSortSeq"] = "ASC";
  22. else
  23. {
  24. ViewState["dataSortName"] = e.SortExpression;
  25. ViewState["dataSortSeq"] = "ASC";
  26. }
  27. DataTable data = (DataTable)ViewState["data"];
  28. data.DefaultView.Sort = string.Format("{0} {1}", ViewState["dataSortName"], ViewState["dataSortSeq"]);
  29. data = data.DefaultView.ToTable();
  30. this.gvResult.DataSource = data;
  31. this.gvResult.DataBind();
  32. ViewState["data"] = data;
  33. }
  34. protected void gvContent_DataBound(object sender, EventArgs e)
  35. {
  36.  
  37. }
  38. protected void gvContent_PreRender(object sender, EventArgs e)
  39. {
  40. DataTable data = (DataTable)ViewState["data"];
  41. if (data == null || data.Rows.Count == 0)
  42. return;
  43. //以下是動態超連結...可不做
  44. #region 取得欄位的位置
  45. int productIndex = 0;
  46. for (int i = 0; i < gvResult.HeaderRow.Cells.Count; i++)
  47. {
  48. if (((LinkButton)(gvResult.HeaderRow.Controls[i].Controls[0])).Text == "PRODUCT_ID")//須超連結的欄位
  49. productIndex = i;
  50. }
  51. #endregion
  52. #region 須超連結的欄位
  53. foreach (GridViewRow gvItem in gvResult.Rows)
  54. {
  55. LinkButton obj = new LinkButton();
  56. obj.Text = gvItem.Cells[productIndex].Text.Trim();
  57. obj.OnClientClick = string.Format(@"javascript:subpop('www.google.com/tw?product={0}');return false;", product);
  58. gvItem.Cells[productIndex].Controls.Add(obj);
  59. }
  60. #endregion
  61. }

沒有留言:

熱門文章