【问题标题】:Bind gridview with List and then move items up and down?将gridview与List绑定,然后上下移动项目?
【发布时间】:2020-03-19 11:16:15
【问题描述】:
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 个或更多项,则第一项将仅显示向下按钮,最后一项将仅显示向上按钮,但两者之间的所有项都将显示两个按钮。

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

编辑:

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

【问题讨论】:

  • 您的逻辑似乎是正确的。你有什么例外吗?如果不是,那么您面临什么问题?
  • 没有例外,但我得到了错误的按钮显示。我不确定我是否将 e.Row.RowIndex 和 gridCustomers.Rows.Count 混淆了?
  • 分享你的.aspx页面代码我是说gridview代码或者关注这篇文章aspsnippets.com/Articles/…
  • 我在原帖中添加了 Gridview 代码
  • 您使用了错误的按钮名称(向上和向下)ID。使用下面的行`LinkBut​​ton lbMoveUp = (LinkBut​​ton)e.Row.FindControl("lbMoveUp"); LinkBut​​ton lbMoveDown = (LinkBut​​ton)e.Row.FindControl("lbMoveDown");`

标签: c# asp.net vb.net


【解决方案1】:
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; }
}

【讨论】:

  • 不幸的是,这不起作用。最后一行显示有 4 条记录的两个按钮,但应该只显示向上按钮
  • @Computer,我已经在我的机器上运行了这段代码,它可以按照您的要求运行。请看附件图片。
  • @Computer,查看我更新的代码,它正在按照您的要求工作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-10
  • 1970-01-01
  • 2019-10-12
  • 2010-10-04
  • 2010-10-05
相关资源
最近更新 更多