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>