使用asp.net c#在listview中排序
本文关键字:listview 排序 asp net 使用 | 更新日期: 2023-09-27 18:15:20
我想在列表视图中做排序从后面的代码,我已经完成了下面的代码:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
BindLV("");
}
public DataTable GetEmployee(string query)
{
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString);
SqlDataAdapter ada = new SqlDataAdapter(query, con);
DataTable dtEmp = new DataTable();
ada.Fill(dtEmp);
return dtEmp;
}
private void BindLV(string SortExpression)
{
string UpdateQuery = "Select * from Employee" + SortExpression;
SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrings["NorthwindConnectionString"].ConnectionString);
lvEmployee.DataSource = GetEmployee(UpdateQuery);
lvEmployee.DataBind();
}
protected void lvEmployee_Sorting(object sender, ListViewSortEventArgs e)
{
ImageButton imEmpID = lvEmployee.FindControl("imEmpID") as ImageButton;
ImageButton imEmpName = lvEmployee.FindControl("imEmpName") as ImageButton;
string DefaultSortIMG = "~/img/asc.png";
string imgUrl = "~/img/desc.png";
if (ViewState["SortExpression"] != null)
{
if (ViewState["SortExpression"].ToString() == e.SortExpression)
{
ViewState["SortExpression"] = null;
imgUrl = DefaultSortIMG;
}
else
{
ViewState["SortExpression"] = e.SortExpression;
}
}
else
{
ViewState["SortExpression"] = e.SortExpression;
}
switch (e.SortExpression)
{
case "EmpID":
if (imEmpName != null)
imEmpName.ImageUrl = DefaultSortIMG;
if (imEmpID != null)
imEmpID.ImageUrl = imgUrl;
break;
case "EmpName":
if (imEmpID != null)
imEmpID.ImageUrl = DefaultSortIMG;
if (imEmpName != null)
imEmpName.ImageUrl = imgUrl;
break;
}
BindLV(" order by " + e.SortExpression + " " + ((ViewState["SortExpression"] != null) ? "ASC" : "DESC"));
}
但问题是我正在使用另一个函数进行数据分页,如下面的代码中包含排序:
protected void DataPager1_PreRender(object sender, EventArgs e)
{
lvEmployee.DataSource = GetEmployee("Select * from Employee");
lvEmployee.DataBind();
}
和我的数据分页代码位于。aspx页面的LayoutTemplate:
<asp:DataPager ID="DataPager1" runat="server" PagedControlID="lvEmployee" PageSize="5" onprerender="DataPager1_PreRender">
<Fields>
<asp:NextPreviousPagerField ButtonType="Button" ShowFirstPageButton="true" ShowLastPageButton="true"/>
</Fields>
</asp:DataPager>
每次我点击名称排序时,列表中不会有任何变化。我已经追踪了这个问题,我发现排序功能是正常的。但是在页面出现之前,调用DataPager1_PreRender
函数并再次显示未排序的列表。
你能指导我如何一起做排序和dataPaging而不会出现这个问题吗?
我已经通过使用Session解决了这个问题。
在我使用会话之前,我发现每次我按下一页或任何时候刷新页面时,它都会执行DataPager1_PreRender()
,并且我已将数据源设置为
GetEmployee("Select * from Employee");
这就是排序永远不会发生的原因。我已将Session["UpdateQT"] = UpdateQuery;
添加到BindLV()
以保持更新查询,并已将DataPager1_PreRender()
更改为
string strtmp = Session["UpdateQT"].ToString();
if (strtmp == null)
{
strtmp = "Select * from Employee";
}
lvEmployee.DataSource = GetEmployee(strtmp);
lvEmployee.DataBind();
保留排序后的最新查询。