首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Gridview -sorting事件不起作用

Gridview -sorting事件不起作用
EN

Stack Overflow用户
提问于 2013-09-13 21:49:01
回答 1查看 446关注 0票数 3

我有一个可编辑的GridView,我试图将排序功能添加到指定的列中。虽然我没有收到错误,但我的排序方法不起作用。能帮我了解一下我在这里缺少的东西吗?

设计:

代码语言:javascript
复制
<asp:GridView ID="gvLogNotice" 
        runat="server" 
        AutoGenerateColumns="false" 
        ShowFooter="false"
        OnRowCancelingEdit="gvLogNotice_RowCancelingEdit"
        OnRowEditing="gvLogNotice_RowEditing" 
        OnRowUpdating="gvLogNotice_RowUpdating"
        EmptyDataText="There are no data records to display."
        DataKeyNames="LogNoticeID"
        AllowPaging="true"
        AllowSorting="true"
        OnSorting="gvLogNotice_sorting"
        Width="700px">
        <Columns>
            <asp:TemplateField HeaderText="Log No." Visible="false">
                <ItemTemplate>
                    <%#Eval("LogNoticeID")%>
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:TextBox ID="txtLogNoticeID" runat="server" Enabled="false" Text=' <%#Eval("LogNoticeID") %>'></asp:TextBox>
                </EditItemTemplate>
             </asp:TemplateField>
            <asp:TemplateField HeaderText="Log Date" SortExpression="DateLogged">
                <ItemTemplate>
                    <%#Eval("DateLogged")%>
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:TextBox ID="txtDateLogged" runat="server" Text=' <%#Eval("DateLogged") %>'></asp:TextBox>
                </EditItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField HeaderText="Log Description" HeaderStyle-Width="50px" sortexpression="LogNoticeDescript">
                <ItemTemplate>
                    <%#Eval("LogNoticeDescript")%>
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:TextBox ID="txtLogNoticeDescript" runat="server" Text=' <%#Eval("LogNoticeDescript") %>'></asp:TextBox>
                </EditItemTemplate>
           </asp:TemplateField>
           <asp:TemplateField HeaderText="Responsible Party" sortexpression="ResponsibleParty">
                <ItemTemplate>
                    <%#Eval("ResponsibleParty")%>
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:TextBox ID="txtResponsibleParty" runat="server" Text=' <%#Eval("ResponsibleParty") %>'></asp:TextBox>
                </EditItemTemplate>
          </asp:TemplateField>
             <asp:TemplateField HeaderText="Planned Date" SortExpression="PlannedDate" >
                <ItemTemplate>
                    <%#Eval("PlannedDate")%>
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:TextBox ID="txtPlannedDate" runat="server" Text=' <%#Eval("PlannedDate") %>'></asp:TextBox>
              </EditItemTemplate>
          </asp:TemplateField>
           <asp:TemplateField HeaderText="Case Number" SortExpression="CaseNumber">
                <ItemTemplate>
                    <%#Eval("CaseNumber")%>
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:TextBox ID="txtCaseNumber" runat="server" Text=' <%#Eval("CaseNumber") %>'></asp:TextBox>
              </EditItemTemplate>
          </asp:TemplateField>
             <asp:TemplateField HeaderText="Log Status" SortExpression="LogStatus">
                <ItemTemplate>
                    <%#Eval("LogStatus")%>
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:TextBox ID="txtLogStatus" runat="server" Text=' <%#Eval("LogStatus") %>'></asp:TextBox>
                </EditItemTemplate>
          </asp:TemplateField>
            <asp:TemplateField HeaderText="Edit">
                <ItemTemplate>
                    &nbsp;&nbsp;
                    <asp:ImageButton ID="ImageButton1" runat="server" ImageUrl="images/edit.png" Width="25"
                        Height="25" CommandName="Edit" />&nbsp;&nbsp;
                   <%-- <asp:ImageButton ID="ImageButton2" runat="server" ImageUrl="~/img/delete.png" CommandName="Delete"
                        OnClientClick="return confirm('Are you sure want to delete record?')" />--%>
                </ItemTemplate>
                <EditItemTemplate>
                    <asp:LinkButton ID="LinkButton1" runat="server" CommandName="Update">Update</asp:LinkButton>&nbsp;&nbsp;
                    <asp:LinkButton ID="LinkButton2" runat="server" CommandName="Cancel">Cancel</asp:LinkButton>
                </EditItemTemplate>
              </asp:TemplateField>
        </Columns>
    </asp:GridView>

代码背后:

//页面加载事件:

代码语言:javascript
复制
 protected void Page_Load(object sender, EventArgs e)
    {
        lblmsg.Text = "";
        if (!Page.IsPostBack)
        {
            gvLogNotice.ShowFooter = false;
            //Load grid data using common method
            LoadGrid();


        }
    }

//将数据绑定到GV并加载

代码语言:javascript
复制
void LoadGrid()
        {
            sqlcmd = new SqlCommand("selectActiveLogs", sqlcon);
            sqlcmd.CommandType = CommandType.StoredProcedure;
            try
            {
                sqlcon.Open();
                da = new SqlDataAdapter(sqlcmd);
                dt.Clear();
                da.Fill(dt);
                gvLogNotice.DataSource = dt;
                gvLogNotice.DataBind();


            }
            catch (Exception ex)
            {

            }
            finally
            {
                sqlcon.Close();
            }
        }

//排序事件

代码语言:javascript
复制
  protected void gvLogNotice_sorting(object sender, GridViewSortEventArgs e)
    {
        switch (e.SortExpression)
        {
            case "DateLogged":
                if (e.SortDirection == SortDirection.Ascending)
                {
                   LoadGrid();
                }
                else
                {
                    LoadGrid();
                }

                break;

           }

    }
EN

回答 1

Stack Overflow用户

发布于 2013-09-15 11:37:56

只有当使用SortDirection属性将GridView绑定到DataSource控件时,才会更改GridView上的DataSource属性。否则,需要手动管理排序方向。

在这种情况下,当我们使用gridView的DataSource属性向它提供数据时,e.SortDirection总是返回Ascending,因此只有IF语句才会被执行.

第二点::您需要优化的实际上只是确保您定义了一个函数来返回数据。例如,假设LoadGrid()只返回DataTable。以这种方式,您不需要定义LoadGrid()方法的重载。Morover,有了正确的实现方式,实际上根本不需要重载。

第三点::根本不应用排序,但只需通过设置DataSource属性并调用DataBind()手动加载GridView.When数据库,就需要手动处理排序操作。

因此,首先将sortDirection存储在ViewState中。只需定义一个公共属性以获得/设置相同的属性。注意我们需要根据上面第1点存储sortDirection值

代码语言:javascript
复制
public SortDirection SortDirection    
{ 
get { 
      if (ViewState["SortDirection"] == null)
            {
                ViewState["SortDirection"] = SortDirection.Ascending;
            }
        return (SortDirection)ViewState["SortDirection"];
     }
set
    {
           ViewState["SortDirection"] = value;
    }
}

OnSorting事件中,设置sortDirection并首先对表进行排序,然后将其加载到gridView中。

代码语言:javascript
复制
 protected void SortRecords(object sender, GridViewSortEventArgs e)
{
     string sortExpression = e.SortExpression;
     string direction = string.Empty;
        if (SortDirection == SortDirection.Ascending)
             {
                  SortDirection = SortDirection.Descending;
                  direction = " DESC";
             }
        else
            {
                 SortDirection = SortDirection.Ascending;
                 direction = " ASC";
            }
    DataTable table = this.LoadGrid(); // or this.GetDataTable(), to get only the DataTable
   // Now apply Sorting to your source of Data
    table.DefaultView.Sort = sortExpression + direction;
   // Bind the GridView
    gvLogNotice.DataSource = table;
    gvLogNotice.DataBind();
}

最后,您的LoadGrid很好,只需要填充表并返回它。

代码语言:javascript
复制
private DataTable LoadGrid()
{
      DataTable dt = new DataTable();
      sqlcmd = new SqlCommand("selectActiveLogs", sqlcon);
      sqlcmd.CommandType = CommandType.StoredProcedure;
      try
       {
            sqlcon.Open();
            da = new SqlDataAdapter(sqlcmd);
            dt.Clear();
            da.Fill(dt);
            return dt;
       }
      catch (Exception ex)
       {}
}
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18795787

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档