問題
如何 使用GridView做出動態排序與超連結
解決方法
.aspx
.cs
- <asp:GridView ID="gvResult" runat="server" OnDataBound="gvContent_DataBound" OnPreRender="gvContent_PreRender"
- EmptyDataText="No Data" AllowSorting="True" OnSorting="gvResult_Sorting" CellSpacing="1"
- BorderColor="Black" HeaderStyle-BackColor="Blue" HeaderStyle-ForeColor="White">
- <RowStyle HorizontalAlign="Center" Wrap="False" BorderWidth="1px" BorderColor="Black" />
- <HeaderStyle BackColor="Blue" ForeColor="White" HorizontalAlign="Center" />
- </asp:GridView>
- protected void Page_Load(object sender, EventArgs e)
- {
- if (!IsPostBack)
- InitData();
- }
- private void InitData()
- {
- DataTable data = get source....
- ViewState["data"] = data;
- ViewState["dataSortName"] = "";
- ViewState["dataSortSeq"] = "";
- this.gvResult.DataSource = data;
- this.gvResult.DataBind();
- }
- protected void gvResult_Sorting(object sender, GridViewSortEventArgs e)
- {
- if (ViewState["dataSortName"].ToString() == e.SortExpression)
- if (ViewState["dataSortSeq"].ToString() == "ASC")
- ViewState["dataSortSeq"] = "DESC";
- else
- ViewState["dataSortSeq"] = "ASC";
- else
- {
- ViewState["dataSortName"] = e.SortExpression;
- ViewState["dataSortSeq"] = "ASC";
- }
- DataTable data = (DataTable)ViewState["data"];
- data.DefaultView.Sort = string.Format("{0} {1}", ViewState["dataSortName"], ViewState["dataSortSeq"]);
- data = data.DefaultView.ToTable();
- this.gvResult.DataSource = data;
- this.gvResult.DataBind();
- ViewState["data"] = data;
- }
- protected void gvContent_DataBound(object sender, EventArgs e)
- {
- }
- protected void gvContent_PreRender(object sender, EventArgs e)
- {
- DataTable data = (DataTable)ViewState["data"];
- if (data == null || data.Rows.Count == 0)
- return;
- //以下是動態超連結...可不做
- #region 取得欄位的位置
- int productIndex = 0;
- for (int i = 0; i < gvResult.HeaderRow.Cells.Count; i++)
- {
- if (((LinkButton)(gvResult.HeaderRow.Controls[i].Controls[0])).Text == "PRODUCT_ID")//須超連結的欄位
- productIndex = i;
- }
- #endregion
- #region 須超連結的欄位
- foreach (GridViewRow gvItem in gvResult.Rows)
- {
- LinkButton obj = new LinkButton();
- obj.Text = gvItem.Cells[productIndex].Text.Trim();
- obj.OnClientClick = string.Format(@"javascript:subpop('www.google.com/tw?product={0}');return false;", product);
- gvItem.Cells[productIndex].Controls.Add(obj);
- }
- #endregion
- }
沒有留言:
張貼留言