0

データテーブルからバインドされたListViewがあり、時系列の項目のいくつかのページが含まれています。

昇順と降順で並べ替えられるようにしたいと思います。

私の<layouttemplate>中には次のものがあります:

<asp:linkbutton runat="server" id="SortbyYear" commandname="Sort" commandargument="Year">Year</asp:linkbutton>

それをクリックすると、pageRequestManagerからonsortingが処理されないというエラーが表示されます。

だから私は私のに以下を追加しました<asp:listview ... >

onsorting="HistoryList_Sorting"

並べ替えを機能させるために、実際にそのメソッドをコードビハインドに何を入れますか?「Year」列を昇順と降順の間で切り替えようとしています。

protected void HistoryList_Sorting(object sender, ListviewSortEventArgs e)
{
    // WHAT GOES HERE???
}

アップデート:

以下は、ASPXページにあるものです。

<asp:listview id="HistoryList" runat="server" convertemptystringtonull="False" onlayoutcreated="HistoryList_LayoutCreated" ondatabound="HistoryList_DataBound" onsorting="HistoryList_Sorting" >
    <layouttemplate>
        <table>
            <tr>
                <th><asp:linkbutton runat="server" id="SortByYear" commandname="Sort" commandargument="Year"><asp:literal runat="server" id="Year" /></asp:linkbutton></th>
                <th><asp:literal runat="server" id="Event" /></th>
            </tr>
            <tr id="ItemPlaceholder" runat="server"></tr>  
        </table>
    </layouttemplate>
    <itemtemplate>
        <tr class="row">
            <td class="history-year-column"><%# Eval("Year") %></td>
            <td><%# Eval("Description") %></td>
        </tr>
    </itemtemplate>
    <alternatingitemtemplate>
        <tr class="row-alternate">
            <td class="history-year-column"><%# Eval("Year") %></td>
            <td><%# Eval("Description") %></td>
        </tr>
    </alternatingitemtemplate>
</asp:listview>

CSページには次のようなものがあります。

#region " Declare: Shared Classes "

    private Localization localizeSite = new Localization();
    private DataXML xmlData = new DataXML();
    public DataTable HistoryDataTable { get; set; }

#endregion



#region " Page: PreInit "

    private void Page_PreInit(object sender, System.EventArgs e)
    {
        Page.MasterPageFile = localizeSite.LoadMasterPage(Page.Master.AppRelativeVirtualPath);
    }

#endregion



#region " Page: Load "

    protected void Page_Load(object sender, System.EventArgs e)
    {
        Edition edition = new Edition();
        ContentTracking.Text = edition.GetEdition(Page.AppRelativeVirtualPath);

        //// LOCALIZE THE WEB SITE CONTENT
        Heading.Text = localizeSite.LocalizeText(Page, "Heading.Text");
        Body.Text = localizeSite.LocalizeText(Page, "Body.Text");
        AdNetworkTracking.Text = localizeSite.LocalizeText(Page, "AdNetworkTracking.Text"); 
    }

#endregion




#region " Handle: OnLayoutCreated "

    protected void HistoryList_LayoutCreated(object sender, System.EventArgs e)
    {
        ((Literal)HistoryList.FindControl("Year")).Text = localizeSite.LocalizeText(Page, "Year.Text");
        ((Literal)HistoryList.FindControl("Event")).Text = localizeSite.LocalizeText(Page, "Event.Text");
    }

#endregion





#region " Handle: Sorting "

    public String SortExpression
    {
        get
        {
            return (string)ViewState["SortExpression"];
        }
        set
        {
            ViewState["SortExpression"] = value;
        }
    }

    protected void HistoryList_Sorting(object sender, ListViewSortEventArgs e)
    {
        String sortExpression = e.SortExpression + " " + e.SortDirection.ToString();
        this.SortExpression = sortExpression.Replace("Ascending", "ASC").Replace("Descending", "DESC");
    }

#endregion





#region " Handle: Paging "

    protected void HistoryList_DataBound(object sender, EventArgs e)
    {
        HistoryPager.Visible = (HistoryPager.PageSize < HistoryPager.TotalRowCount);
    }


    protected void HistoryPager_PreRender(object sender, EventArgs e)
    {

        if (HistoryDataTable == null)
        {
            HistoryDataTable = xmlData.GetDataTable(Server.MapPath("~/App_Data/history.xml"), "Event");
        }

        if (!String.IsNullOrEmpty(SortExpression))
        {
            HistoryDataTable.DefaultView.Sort = SortExpression;
        }

        HistoryList.DataSource = HistoryDataTable;
        HistoryList.DataBind();
    }

#endregion

並べ替えはまだ機能していません。

4

4 に答える 4

1

リスト ビューがデータベースにバインドされている場合、「order by」句を使用してデータベースの select ステートメントを並べ替えることができますか? これにより、データが並べ替えられた順序で返されるため、リスト ビュー自体でデータを並べ替える必要はありません。

これが並べ替えの質問に答えないことは知っていますが、あなたがそれを考慮していない場合に備えて、私はそれを捨てると思いました.

于 2014-01-09T16:06:18.210 に答える
0

私はこれを自分で行っていませんが、次のようなことをしているようです: asp.net ListView Sorting using DataBind。それが役に立てば幸い!

于 2013-03-24T02:50:43.760 に答える
0

データページャーを使用して並べ替えをListView行い、ページの変更時に並べ替えを保持する場合は、いくつかのことを覚えておく必要があります。

  1. 最後の並べ替え方向、つまり列を並べ替えるときに、最初にクリックしたのか2番目にクリックしたのか、つまり昇順または降順を知る必要があります。

  2. ページの変更中(ポストバック)にsortExpressionを維持する必要があります。つまり、データソースで並べ替えを行う必要があります。

以下の例を参照してください。

を作成しListView、そのLayoutTemplate中に、ListView のヘッダーにとieを配置LinkButtonします。CommandName="Sort"CommandArgument="ColumnName"

<LayoutTemplate>
  <table>
    <tr>
       <td>
         <asp:LinkButton ID="btnNameSort" runat="server" 
            CommandName="sort" CommandArgument="Name" 
            Text="Name">
         </asp:LinkButton>
       </td>
        ..
        ..
</LayoutTemplate>

コードビハインドでこれを行います:

public string SortExpression
{
     get
     {
        return (string)ViewState["SortExpression"];
     }
     set
     {
        ViewState["SortExpression"] = value;
     }
}
public DataTable lvwDataSource { get; set; }

およびリストビューの並べ替えイベントを次のように:

protected void lvwData_Sorting(object sender, ListViewSortEventArgs e)
{
   string sortExp = e.SortExpression + " " + e.SortDirection.ToString();
   this.SortExpression = sortExp.Replace("Ascending", "ASC")
                                .Replace("Descending", "DESC");
}

DataPager の PreRender イベントで listView をバインドします。

protected void DataPager1_PreRender(object sender, EventArgs e)
{
   if (lvwDataSource == null)
        lvwDataSource = StaticData.GetData();

   if (!string.IsNullOrEmpty(SortExpression))
        lvwDataSource.DefaultView.Sort = SortExpression;

   lvwData.DataSource = lvwDataSource;
   lvwData.DataBind();
}

そのため、ページング時に並べ替えを維持するには、データソースをグローバル スコープで定義する必要があります。

于 2013-03-24T11:16:09.420 に答える
0
if(e.commandName==Sort)
{
  //Code you want to implement on the button click event
}
于 2013-03-24T11:09:12.890 に答える