排序不起作用 [英] Sorting is not working
本文介绍了排序不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
<asp:GridView ID="grd1" runat ="server" Width="600px" Height ="600px" ShowHeader="true"
ShowFooter="true" AutoGenerateColumns ="false" AllowPaging="true"
onpageindexchanging="grd1_PageIndexChanging" OnSorting="grd1_Sorting"
onrowcreated="grd1_RowCreated" Font-Bold="True" Font-Size="Medium"
ForeColor="Black" AllowSorting="true"
Font-Names="Verdna"
>
<Columns >
<asp:TemplateField SortExpression="Sr.No" >
<HeaderStyle ForeColor="Blue" Font-Bold ="true" />
<HeaderTemplate >
Sr. No
</HeaderTemplate>
<ItemTemplate >
<div style="width :100%;">
<asp:Label ID="srno" runat ="server" Text='<%# Container.DataItemIndex +1 %>' />
</div>
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField SortExpression="Roll" >
<HeaderStyle ForeColor="Blue" Font-Bold ="true" />
<HeaderTemplate>
Roll
</HeaderTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtrollno" runat ="server" Text='<%# Bind("Roll") %>' />
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="lblrollno" runat ="server" Text='<%# Bind("Roll") %>' />
</ItemTemplate>
</asp:TemplateField>
<asp:TemplateField SortExpression="Name" >
<HeaderStyle ForeColor="Blue" Font-Bold ="true" />
<HeaderTemplate>
Name
</HeaderTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtname" runat ="server" Text='<%# Bind("name") %>' />
</EditItemTemplate>
<ItemTemplate>
<asp:Label ID="lblname" runat ="server" Text='<%# Bind("name") %>' />
</ItemTemplate>
</asp:TemplateField>
</Columns>
<PagerStyle BackColor="#3366CC" ForeColor="#000099" />
<HeaderStyle BackColor="#9966FF" />
</asp:GridView>
背后的代码是
code behind is
protected void Page_Load(object sender, EventArgs e)
{
if (!Page.IsPostBack)
{
bind();
}
}
public void bind()
{
da = new SqlDataAdapter("select * from stu_info", strcon);
ds = new DataSet();
da.Fill(ds);
grd1.DataSource = ds.Tables[0];
grd1.DataBind();
}
protected void grd1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
grd1.PageIndex = e.NewPageIndex;
grd1.DataSource = ds.Tables[0];
searchstring = txtSearch.Text;
grd1.DataBind();
}
protected void grd1_RowCreated(object sender, GridViewRowEventArgs e)
{
if (e.Row.RowType == DataControlRowType.Pager)
{
DropDownList ddl = new DropDownList();
//adds variants of pager size
ddl.Items.Add("5");
ddl.Items.Add("10");
ddl.AutoPostBack = true;
//selects item due to the GridView current page size
ListItem li = ddl.Items.FindByText(grd1.PageSize.ToString());
if (li != null)
ddl.SelectedIndex = ddl.Items.IndexOf(li);
ddl.SelectedIndexChanged += new EventHandler(ddl_SelectedIndexChanged);
//adds dropdownlist in the additional cell to the pager table
Table pagerTable = e.Row.Cells[0].Controls[0] as Table;
TableCell cell = new TableCell();
cell.Style["padding-left"] = "60px";
cell.Style.Add("forecolor", "white");
cell.Controls.Add(new LiteralControl("Page Size:"));
cell.ForeColor = System.Drawing.Color.White;
cell.Controls.Add(ddl);
pagerTable.Rows[0].Cells.Add(cell);
}
}
void ddl_SelectedIndexChanged(object sender, EventArgs e)
{
//changes page size
grd1.PageSize = int.Parse(((DropDownList)sender).SelectedValue);
//binds data source
grd1.DataSource = ds.Tables[0];
grd1.DataBind();
}
protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
grd1.PageSize = int.Parse(((DropDownList)sender).SelectedValue);
grd1.DataSource = ds.Tables[0];
grd1.DataBind();
}
protected string HighlightText(string searchWord, string inputText)
{
Regex expression = new Regex(searchWord.Replace(" ", "|"), RegexOptions.IgnoreCase);
return expression.Replace(inputText, new MatchEvaluator(ReplaceKeywords));
}
public string ReplaceKeywords(Match m)
{
return "<span class="highlight" >" + m.Value + "</span>";
}
protected void btnSearch_Click(object sender, EventArgs e)
{
searchstring = txtSearch.Text;
DataTable dt = ds.Tables[0];
DataView dv = new DataView(dt);
String SearchExpression = null;
if (!string.IsNullOrEmpty(txtSearch.Text))
{
SearchExpression = string.Format("{0}'%{1}%'", grd1.SortExpression, txtSearch.Text);
}
dv.RowFilter = "Name like" + SearchExpression;
grd1.DataSource = dv;
grd1.DataBind();
}
public SortDirection dir
{
get
{
if (ViewState["dirstate"] == null)
{
ViewState["dirstate"] = SortDirection.Ascending;
}
return (SortDirection)ViewState["dirstate"];
}
set
{
ViewState["dirstate"] = value;
}
}
protected void grd1_Sorting(object sender, GridViewSortEventArgs e)
{
bind();
DataTable dt = new DataTable();
dt = ds.Tables[0];
{
string SortDir = string.Empty;
if (dir == SortDirection.Ascending)
{
dir = SortDirection.Descending;
SortDir = "Desc";
}
else
{
dir = SortDirection.Ascending;
SortDir = "Asc";
}
DataView SortedView = new DataView(dt);
SortedView.Sort = e.SortExpression + "" + SortDir;
grd1.DataSource = SortedView;
grd1.DataBind();
}
}
}
推荐答案
您似乎在排序事件中创建新的DataTable Gridview。
取而代之的是从数据源获取
It seems you are creating a new DataTable in Sorting Event of the Gridview.
Instead fetch it from the Datasource
DataTable dataTable = GridView1.DataSource as DataTable;
或者甚至可以使用会话,例如
Or Can even use a Session for it ,like
DataTable dataTable = Session["datatable"] as DataTable; //Session should be set in BindMethod
此外,删除在排序事件中调用的Bind()方法。
尝试并还原。
Also , remove the Bind() method called in Sorting event.
Try and revert.
这篇关于排序不起作用的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文