排序不起作用 [英] Sorting is not working

查看:85
本文介绍了排序不起作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

<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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆