Связать gridview с List и затем перемещать элементы вверх и вниз? - PullRequest
0 голосов
/ 19 марта 2020
public class Customer
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Surname { get; set; }
}

List<Customer> ListOfCustomers = new List<Customer> ListOfCustomers();

ListOfCustomers.Add(new Customer{Id="1", Name="Adam", Surname="Bong"});
ListOfCustomers.Add(new Customer{Id="2", Name="Bob", Surname="Tong"});
ListOfCustomers.Add(new Customer{Id="3", Name="Colin", Surname="Wong"});
ListOfCustomers.Add(new Customer{Id="4", Name="David", Surname="Rong"});

Затем я связываю его с моим видом сетки

if(!Page.IsPostback)
{
    gridCustomers.DataSource = ListOfCustomers();
    gridCustomers.DataBind();
}

Теперь я хотел бы перемещать элементы вверх и вниз, поэтому добавил две кнопки на мою разметку. Под моим событием RowDataBound

 protected void gridCustomers_OnRowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            LinkButton lbMoveUp = (LinkButton)e.Row.FindControl("MoveUpLinkButton");
            LinkButton lbMoveDown = (LinkButton)e.Row.FindControl("MoveDownLinkButton");

            Customer c = (Customer)e.Row.DataItem;

            lbMoveUp.CommandArgument = c.Id.ToString();
            lbMoveUp.CommandName = "MoveUp";
            lbMoveDown.CommandArgument = c.Id.ToString();
            lbMoveDown.CommandName = "MoveDown";

            if (c.Id > 0)
            {
                if (e.Row.RowIndex == 0)
                {
                    lbMoveUp.Visible = false;
                }
                else if (e.Row.RowIndex >= 1 && e.Row.RowIndex <= gridCustomers.Rows.Count -1)
                {
                    lbMoveUp.Visible = true;
                    lbMoveDown.Visible = true;
                }
                else if (e.Row.RowIndex == gridCustomers.Rows.Count)
                {
                    lbMoveDown.Visible = false;
                }
            }
            else
            {
                lbMoveUp.Visible = false;
                lbMoveDown.Visible = false;
            }
        }
    }

То, что я пытаюсь достичь, это

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

Если имеется 2 элемента, то первый элемент будет отображать только кнопку «вниз», а второй (или последний) будет отображать только кнопку «вверх».

Если имеется 3 или более элементов, то первый элемент будет отображать кнопку «вниз». only и last отображает только кнопку вверх, но между ними отображаются обе кнопки.

Я получаю ряд проблем, используя приведенный выше код, и задаюсь вопросом, может ли кто-нибудь указать мне правильное направление?

Редактировать:

<asp:GridView ID="gridCustomers" runat="server" AllowPaging="false" 
                AllowSorting="false" AutoGenerateColumns="false" Width="100%" ShowHeader="true" 
                OnRowDataBound="gridCustomers_OnRowDataBound" AlternatingRowStyle-CssClass="alt" 
                OnRowCommand="gridCustomers_OnRowCommand" 
                EmptyDataText="Please add a record.">
                                                <Columns>
                                                    <asp:TemplateField HeaderText="Move Order">
                                                        <ItemTemplate>
                                                            <p>
                                                                <asp:LinkButton ID="MoveUpLinkButton" runat="server"><img src="...." alt="Up"/></asp:LinkButton>
                                                                <asp:LinkButton ID="MoveDownLinkButton" runat="server"><img src="...." alt="Down" /></asp:LinkButton>
                                                            </p>
                                                        </ItemTemplate>
                                                    </asp:TemplateField>
                                                </Columns>
                                            </asp:GridView>

1 Ответ

1 голос
/ 19 марта 2020
public partial class _Default : Page
{
    List<Customer> listOfCustomers = new List<Customer>();
    protected void Page_Load(object sender, EventArgs e)
    {

        listOfCustomers.Add(new Customer { Id = 1, Name = "Adam", Surname = "Bong" });
        listOfCustomers.Add(new Customer { Id = 2, Name = "Bob", Surname = "Tong" });
        listOfCustomers.Add(new Customer { Id = 3, Name = "Colin", Surname = "Wong" });
        listOfCustomers.Add(new Customer { Id = 4, Name = "David", Surname = "Rong" });

        if (!Page.IsPostBack)
        {
            gridCustomers.DataSource = listOfCustomers;
            gridCustomers.DataBind();
        }
    }

    protected void gridCustomers_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow)
        {
            LinkButton lbMoveUp = (LinkButton)e.Row.FindControl("lbMoveUp");
            LinkButton lbMoveDown = (LinkButton)e.Row.FindControl("lbMoveDown");

            Customer c = (Customer)e.Row.DataItem;

            lbMoveUp.CommandArgument = c.Id.ToString();
            lbMoveUp.CommandName = "MoveUp";
            lbMoveDown.CommandArgument = c.Id.ToString();
            lbMoveDown.CommandName = "MoveDown";

            if (c.Id > 0)
            {
                if (e.Row.RowIndex == 0)
                {
                    lbMoveUp.Visible = false;
                }
                else if (e.Row.RowIndex >= 1 && e.Row.RowIndex < listOfCustomers.Count - 1)
                {
                    lbMoveUp.Visible = true;
                    lbMoveDown.Visible = true;
                }
                else if (e.Row.RowIndex == listOfCustomers.Count - 1)
                {
                    lbMoveDown.Visible = false;
                }
            }
            else
            {
                lbMoveUp.Visible = false;
                lbMoveDown.Visible = false;
            }
        }
    }
}
public class Customer
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Surname { get; set; }
}

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...