【问题标题】:How to sort on page load and also display an image based on sort in GridView如何在页面加载时排序并在 GridView 中基于排序显示图像
【发布时间】:2023-03-10 03:18:02
【问题描述】:

我有以下实现排序的代码(asp.net 和代码隐藏):

protected void Page_Load(object sender, EventArgs e)
{

    if (!Page.IsPostBack)
    {
        PullData("", "");
        ViewState["sortOrder"] = "";
    }
}
public void PullData(string sortExp, string sortDir)
{
    DataTable taskData = new DataTable();
    string connString = @"user id = dsfsdfds;" + "password= sadasdada; server=  mg; database= ob;" /*+ "Trusted_Connection=yes;"*/  + "connection timeout=30";
    string query = @"SELECT  'http://mg/appnet/workview/objectPop.aspx?objectid=' + CAST(CT.OBJECTID AS VARCHAR) + '&classid=1224' 'Task Detail'
            ,UG.USERGROUPNAME 'Services'
            ,CT.ATTR2812 'Status'
            ,CT.ATTR2752 'Due Date'
            ,CT.ATTR2739 'Task Name'

        FROM dbo.RMOBJECTINSTANCE1224 CT
        WHERE CT.ACTIVESTATUS = 0";

    using (SqlConnection conn = new SqlConnection(connString))
    {
        try
        {
            SqlCommand cmd = new SqlCommand(query, conn);

            // create data adapter
            SqlDataAdapter da = new SqlDataAdapter(query, conn);
            // this will query your database and return the result to your datatable

            DataSet myDataSet = new DataSet();
            da.Fill(myDataSet);

            DataView myDataView = new DataView();
            myDataView = myDataSet.Tables[0].DefaultView;

            if (sortExp != string.Empty)
            {
                myDataView.Sort = string.Format("{0} {1}", sortExp, sortDir);
            }

            yourTasksGV.DataSource = myDataView;
            yourTasksGV.DataBind();

            conn.Close();
        }
        catch (Exception ex)
        {
            string error = ex.Message;
        }
    }
}

protected void yourTasksGV_Sorting(object server, GridViewSortEventArgs e)
{
    PullData(e.SortExpression, sortOrder);
}
public string sortOrder
{
    get
    {
        if (ViewState["sortOrder"].ToString() == "Desc")
        {
            ViewState["sortOrder"] = "Asc";
        }
        else
        {
            ViewState["sortOrder"] = "Desc";
        }

        return ViewState["sortOrder"].ToString();
    }
    set
    {
        ViewState["sortOrder"] = value;
    }
}

我的GridView

<asp:GridView AlternatingRowStyle-BackColor="#E2E2E2" AutoGenerateColumns="false" OnSorting="yourTasksGV_Sorting" AllowSorting="true" ID="yourTasksGV" runat="server" ClientIDMode="Static" EmptyDataText="There is no data to display" OnRowDataBound="yourTasksGV_RowDataBound" OnRowCreated="yourTasksGV_RowCreated">
    <Columns>
        <asp:HyperLinkField Target="_blank" DataNavigateUrlFields="Task Detail" DataTextField="Task Name" DataNavigateUrlFormatString="" HeaderText="Task Details" SortExpression="Task Detail" ItemStyle-Width="35%" ItemStyle-CssClass="taskTableColumn" />
        <asp:BoundField DataField="Services" HeaderText="Services" SortExpression="Services" ItemStyle-Width="25%" ItemStyle-CssClass="taskTableColumn" />
        <asp:BoundField DataField="Status" HeaderText="Status" SortExpression="Status" ItemStyle-Width="15%" ItemStyle-CssClass="taskTableColumn" />
        <asp:BoundField DataField="Due Date" HeaderText="Due Date" SortExpression="Due Date" ItemStyle-Width="15%" ItemStyle-CssClass="taskTableColumn" />
    </Columns>
</asp:GridView>

对于第一列,我使用 Task Name 并显示为 SQL 查询中 Task Detail 列中链接的显示文本(DataTextField 是任务名称而不是任务详细信息)。

如何修改我的代码以执行以下操作:

  1. 当我单击Task Details 选项卡时,它应该按Task Name 排序,显示为Task Detail 链接的显示?
  2. 在我排序表格的标题文本旁边显示图像? (up.png 和 down.png)?
  3. 在页面加载时,按#1 ASC 排序并分别显示图像?

我的GridView 正在显示给用户(注意第一列链接在href 中的使用方式,显示文本是Task Name):

【问题讨论】:

    标签: c# asp.net sorting gridview


    【解决方案1】:

    这里有一个有用的解决方案:

    http://blogs.msdn.com/b/scothu/archive/2010/08/28/gridview-with-sort-arrows-and-showing-header-when-empty.aspx

    你可以做到这一点
    显示图像使用此代码:

    protected void gv_RowCreated(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.Header)
        {
            //Call the GetSortColumnIndex helper method to determine
            //the index of the column being sorted.
    
            int sortColumnIndex = GetSortColumnIndex();
    
            if (sortColumnIndex != -1)
            {
                // Call the AddSortImage helper method to add
                // a sort direction image to the appropriate
                // column header. 
                AddSortImage(sortColumnIndex, e.Row);
            }
        }
    }
    
    int GetSortColumnIndex()
    {
        // Iterate through the Columns collection to determine the index
        // of the column being sorted.
        foreach (DataControlField field in gv.Columns)
        {
            if (field.SortExpression == gv.SortExpression)
            {
                return gv.Columns.IndexOf(field);
            }
        }
    
        return -1;
    }
    
        void AddSortImage(GridViewRow headerRow) 
    { 
         int iCol = GetSortColumnIndex();
         if (-1 == iCol) 
               return; 
    
         // Create the sorting image based on the sort direction.
    
         Image sortImage = new Image();
         if (SortDirection.Ascending == this.GridView1.SortDirection) 
    
    {             sortImage.ImageUrl = @"~\Images\BlackDownArrow.gif"; 
                   sortImage.AlternateText = "Ascending Order"; 
    }     else  
    {
                 sortImage.ImageUrl = @"~\Images\BlackUpArrow.gif";
                 sortImage.AlternateText = "Descending Order";
    }
          // Add the image to the appropriate header cell. 
            headerRow.Cells[iCol].Controls.Add(new LiteralControl("&nbsp;"));
            headerRow.Cells[iCol].Controls.Add(sortImage); 
    } 
    

    要进行排序,请启用gridview“允许排序属性”并将“排序表达式”添加到列属性中。

    【讨论】:

    • 感谢您的帖子。图片在哪里显示?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多