【发布时间】: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。使用下面的行`LinkButton lbMoveUp = (LinkButton)e.Row.FindControl("lbMoveUp"); LinkButton lbMoveDown = (LinkButton)e.Row.FindControl("lbMoveDown");`