Проблема заполнения списка ASP.NET - PullRequest
1 голос
/ 27 января 2012

На данный момент я пытаюсь создать страницу ASP.NET, которая будет перечислять книги из категории, в списке в зависимости от выбранной кнопки категории, а затем у меня есть еще две кнопки (одна для порядка DESC и одна дляASC заказ).Теперь проблема заключается в том, что когда я нажимаю кнопку ASC или DESC после нажатия кнопки «Беллетристика» и заполнения списка, она стирает поле списка.

Ранее я опубликовал аналогичный вопрос, получил некоторые исправления, но он все ещестирание списка, когда я нажимаю кнопки ASC или DESC.

Я довольно новичок в ASP.NET, поэтому очень приветствуются простые или "дружественные к новичкам" объяснения и примеры кода / исправления!

Заранее спасибо!

Код ниже

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

public partial class partin : System.Web.UI.Page
{
private List<String> books = new List<String>();

void Page_PreRender()
{
    Item_Listbox.DataSource = books;
    Item_Listbox.DataBind();   
}

int SortASC(string x, string y)
{
    return String.Compare(x, y);
}

int SortDESC(string x, string y)
{
    return String.Compare(x, y) * -1;
}

protected void Page_Load(object sender, EventArgs e)
{
    if (!IsPostBack)
    {

        Header_Label.Text = "Welcome! Please select a book category.";
        Item_Listbox.DataSource = books;
        Item_Listbox.DataBind();

    }

}

protected void Fiction_Click(object sender, EventArgs e)
{

        Header_Label.Text = "Fiction Section";

        books.Add("Title: The Old Man and The Sea | Decription: An epic novel. | Price: 10 USD | Quantity: 3");
        books.Add("Title: A Game of Thrones | Decription: A tale of fire and ice. | Price: 15 USD | Quantity: 6");
        books.Add("Title: Dracula | Decription: A book about vampires. | Price: 5 USD | Quantity: 7");
        books.Add("Title: Twilight | Decription: An awful book. | Price: Free | Quantity: 1000");

        Item_Listbox.DataSource = books;
        Item_Listbox.DataBind();

}


protected void Non_Fiction_Click(object sender, EventArgs e)
{
    Header_Label.Text = "Non-Fiction Section";



}
protected void Self_Help_Click(object sender, EventArgs e)
{
    Header_Label.Text = "Self Help Section";



}

protected void Sort_Command(object sender, CommandEventArgs e)
{
    if (e.CommandName == "Sort")
    {
        switch (e.CommandArgument.ToString())
        {
            case "ASC":
                books.Sort(SortASC);
                break;
            case "DESC":
                books.Sort(SortDESC);
                break;
        }

    }
    Item_Listbox.DataSource = books;
    Item_Listbox.DataBind();  
}



}

Код ASPX:

    &nbsp;<asp:Panel 
        ID="Navigation" runat="server" Height="276px" Width="197px" 
        CssClass="Navigation" BorderColor="Black" BorderStyle="Double">
    <asp:Button ID="Fiction" runat="server" Text="Fiction" Width="145px" 
            CssClass="Nav_buttons" onclick="Fiction_Click" />
    <asp:Button ID="Non_Fiction" runat="server" Text="Non-Fiction" Width="145px" 
            CssClass="Nav_buttons" onclick="Non_Fiction_Click" />
    <asp:Button ID="Self_Help" runat="server" Text="Self Help" Width="145px" 
            CssClass="Nav_buttons" onclick="Self_Help_Click" />
    <asp:Button ID="New_Item" runat="server" Text="Add New Item" Width="145px" CssClass="Nav_buttons" />        
</asp:Panel>
<asp:Panel ID="Books_Panel" runat="server" CssClass="Books_Panel" Height="409px" 
        BorderStyle="Double">
        <asp:Label ID="Header_Label" runat="server" 
            style="top: 79px; left: 693px; position: absolute; height: 19px; width: 234px" 
            Text="Label"></asp:Label>

        <asp:ListBox ID="Item_Listbox" runat="server" 


            style="top: 204px; left: 443px; position: absolute; height: 136px; width: 732px" 
            AutoPostBack="True">
        </asp:ListBox>

        <asp:Button ID="Ascending_Button" runat="server" 
            style="top: 375px; left: 723px; position: absolute; height: 26px; width: 169px" 
            Text="Ascending Order" CommandName="Sort" CommandArgument="ASC" 
            OnCommand="Sort_Command" />

        <asp:Button ID="Descending_Button" runat="server" 
            style="top: 405px; left: 723px; position: absolute; height: 26px; width: 169px" 
            Text="Descending Order" CommandName="Sort" CommandArgument="DESC" 
            OnCommand="Sort_Command" />

        <asp:DropDownList ID="Cat_Menu" runat="server">
        </asp:DropDownList>

    </asp:Panel>

1 Ответ

1 голос
/ 27 января 2012

Когда вы нажимаете кнопку ASC или DESC для сортировки списка, он переходит к обработчику сортировки, но здесь books пусто при обратной передаче страницы, поэтому пустой источник данных привязан к списку.

Вам следует либо перепривязать источник, либо сохранить его в состоянии просмотра, чтобы его можно было использовать при пост-посте назад.

Попробуйте что-нибудь подобное.

private List<String> books
{ 
   get{
         if(ViewState["books"] == null){
             List<String> books = new List<String>();
             books.Add("Title: The Old Man and The Sea | Decription: An epic novel. | Price: 10 USD | Quantity: 3");
            books.Add("Title: A Game of Thrones | Decription: A tale of fire and ice. | Price: 15 USD | Quantity: 6");
            books.Add("Title: Dracula | Decription: A book about vampires. | Price: 5 USD | Quantity: 7");
            books.Add("Title: Twilight | Decription: An awful book. | Price: Free | Quantity: 1000");
             ViewState["books"] = books;
         }
         return new List<String>((String[])ViewState["books"]);
   }
   set{
       ViewState["books"] = value;
   }
}

protected void Fiction_Click(object sender, EventArgs e)
{
        Header_Label.Text = "Fiction Section";

        Item_Listbox.DataSource = books;
        Item_Listbox.DataBind();
}

protected void Sort_Command(object sender, CommandEventArgs e)
{
    if (e.CommandName == "Sort")
    {
        switch (e.CommandArgument.ToString())
        {
            case "ASC":
                books.Sort(SortASC);
                break;
            case "DESC":
                books.Sort(SortDESC);
                break;
        }

    }

    Item_Listbox.DataSource = books;
    Item_Listbox.DataBind();  
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...