繁体   English   中英

用List绑定gridview然后上下移动项目?

[英]Bind gridview with List and then move items up and down?

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"});

然后我将它绑定到我的 gridview

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 个或更多项目,则第一个项目将仅显示向下按钮,最后一个将仅显示向上按钮,但两者之间的所有项目都将显示两个按钮。

我使用上面的代码遇到了一系列问题,想知道是否有人能指出我正确的方向?

编辑:

<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>
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; }
}

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM