如何根据GridView的第一行和最后一行禁用和启用ItemTemplate LinkBut​​ton?

时间:2012-01-12 08:32:05

标签: c# asp.net gridview

我有一个带有文本框和两个LinkBut​​ton Up和Down的gridview,我想将LinkBut​​ton上下调为Disable,条件是,必须禁用第一行的Linkbutton Up,并且必须禁用Linkbutton Down。最后一行。

我想在onRowDataBound上做..但我无法做..

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

请有人告诉我如何做到这一点..用一些测试exp。

3 个答案:

答案 0 :(得分:2)

我不会在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方法或直接索引控件。

答案 1 :(得分:0)

您需要在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)
    {
    }

答案 2 :(得分:0)

当您像这样绑定网格时,您执行相同的任务。假设您的链接位于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;
  }