Analytics

2017年2月20日 星期一

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


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



解決方法
.aspx
<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>
.cs
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
}

沒有留言:

熱門文章