在Gridview中嵌套转发器:如果转发器中没有数据,则隐藏gridview行和转发器头

时间:2010-04-21 08:27:51

标签: c# asp.net gridview repeater

我在Gridview中嵌套了一个转发器控件。现在它为每种情况显示gridview行和转发器头(无论数据是否存在于转发器控件中的特定网格视图行)。我希望在特定gridview行没有数据时隐藏gridview行和转发器控件头。

谢谢, 这种情况我通过过滤结果数据表在代码级别处理。

现在我面临的另一个问题是: 我已经允许在gridview上进行分页,即pagesize 3。 页面加载时它工作正常,但是当我转到第2页时,它会生成以下错误: 指数超出范围。必须是非负数且小于集合的大小。参数名称:index

下面是在网格的rowdatabound事件上填充网格,分页和填充转发器的代码。

private void FillGrid()     {             clsCustomFunctions objShort = new clsCustomFunctions();             grd1.DataSource = objShort.GetAll();
    }

protected void grd1_PageIndexChanging(object sender, GridViewPageEventArgs e)
{
    try
    {
        FillGrid();
        grd1.PageIndex = e.NewPageIndex;
        grd1.DataBind();
    }
    catch (Exception ex)
    {
        lblMsg.Text = ex.Message;
    }
}

protected void grd1_RowDataBound(object sender, GridViewRowEventArgs e)
{
    clsCustomFunctions objShort = new clsCustomFunctions();        
    if (e.Row.RowType == DataControlRowType.DataRow)
    {            
        ((HtmlTable)e.Row.FindControl("gridTable")).BgColor = "#006699";
        Repeater rpt = (Repeater)e.Row.FindControl("rpt1");
        rpt.DataSource = objShort.GetResult(Convert.ToInt32(grd1.DataKeys[e.Row.DataItemIndex].Value));
        rpt.DataBind();
    }
}

grd1.DataKeys [e.Row.DataItemIndex] .Value行正在抛出错误。如何处理它只传递第2页的值。

1 个答案:

答案 0 :(得分:1)

尝试处理网格的OnRowDataBound事件。这为您提供了一个GridViewRowEventArgs对象(比如说e)。

然后,您可以查看e.Row.DataItem以获取它绑定的数据,以检查是否需要隐藏标题。

您可以使用e.Row.FindControl(“RepeaterName”)让转发器根据需要进行操作。