如何基于GridView的第一行和最后一行禁用和启用ItemTemplate链接按钮

本文关键字:一行 启用 ItemTemplate 链接 按钮 最后 GridView 何基于 | 更新日期: 2023-09-27 18:20:15

我有一个带有文本框和两个LinkButton Up和Down的网格视图,我想将LinkButton Up and Down设置为Disable,条件是第一行必须禁用LinkButton Up,最后一行必须禁用LinkButton Down。

我正在onRowDataBound中尝试。。但是我做不到。

foreach (GridViewRow row in GridView1.Rows)
{
  // some code?
}

请有人告诉我怎么做。。有一些测试经验。

如何基于GridView的第一行和最后一行禁用和启用ItemTemplate链接按钮

我不会在OnRowDataBound事件中这样做,我会在绑定GridView后禁用控件:

// Bind
gv.DataSource = datasource;
gv.DataBind();
// Disable Up/Down LinkButtons
if (gv.Rows.Count > 0)
{
    // With FindControl() if you know the IDs:
    ((LinkButton)gv.Rows[0].Cells[0].FindControl("lb_up").Enabled = false; // Disable up LinkButton 
    ((LinkButton)gv.Rows[gv.Rows.Count - 1].Cells[0].FindControl("lb_down").Enabled = false; // Disable down LinkButton 
    // -- OR --
    // Directly index the controls, assuming Up is at 0, and Down is at 1:
    ((LinkButton)gv.Rows[0].Cells[0].Controls[0]).Enabled = false; // Disable up LinkButton 
    ((LinkButton)gv.Rows[gv.Rows.Count - 1].Cells[0].Controls[1]).Enabled = false; // Disable down LinkButton 
}

您可以使用FindControl方法,也可以直接对控件进行索引。

您需要比较RowDataBound事件中的RowType。类似这样的东西:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    GridViewRow row = e.Row;
    if (row.RowType == DataControlRowType.DataRow)
    {
        .....
    }
}

您可以在HeaderTemplate和FooterTemplate中分别添加DownUp按钮。

if (row.RowType == DataControlRowType.Header)
    {
    }
if (row.RowType == DataControlRowType.Footer)
    {
    }

当您像这样绑定网格时,您会执行相同的任务。假设您的链接位于asp:TemplateField中。

 if (GridView1.PageIndex == 0)
  {
     GridView1.Rows[0].FindControl("lnkUp").Visible = false;
  }
  if (GridView1.PageIndex == (GridView1.PageCount - 1))
  {
      GridView1.Rows[GridView1.Rows.Count - 1].FindControl("lnkDown").Visible = false;
  }