如何在GridView RowDataBound中获取其他参数

时间:2012-04-11 19:14:14

标签: asp.net asp.net-webcontrol

我有一个获取DataSource的GridView。现在在RowDataBound上,我需要对行单元格进行一些更改,但是我需要一条外部信息来确定发生了什么变化。

static void GridRowDataBoundProbables(object sender, GridViewRowEventArgs e)
{
    if(e.Row.RowType == DataControlRowType.Header)
    {
        foreach (TableCell cell in e.Row.Cells)
        {
            if (!int.TryParse(cell.Text, out postNum)) continue;
            cell.CssClass += " postCell";
            cell.Add(new Panel { CssClass = (**isHarness** ? PostHarness : PostThoroughbred) + postNum });
            cell.Add(new Label { Text = postNum.ToString() });
        }
    }
}

我需要isHarness bool,当我创建并绑定网格时可以使用它。 此外,由于网格是在静态WebMethod调用期间创建的,因此无法使其成为页面上的全局。

如何将isHarness的值输入此函数?我以为我可以创建自己继承自GridViewRowEventArgs的EventArgs,但我仍然不知道如何在我的新args中实际获得bool ......

修改

isHarness是一个在创建DataSource时确定的bool,但不是DataSource的一部分

下面是外部调用的模拟:

[WebMethod]
public static AjaxReturnObject GetProbables(string token, string track, string race, string pool)
{
    Tote tote = new Tote(...);
    GridView grid = new GridView();
    grid.RowDataBound += GridRowDataBound;
    grid.DataSource = tote.GetDataSource(); //isHarness is available during creation of DataSource
    //Here tote.isHarness is available from property
    grid.DataBind();
}

1 个答案:

答案 0 :(得分:0)

答案一如既往地是"它取决于"。

我们对你的bool isHarness了解不多。这个变量的范围是什么?它是页面的成员吗? GridView的成员?它是GridView数据源的一部分吗?

如果它是页面的公共成员,则可以从您的方法中将sender强制转换为Web控件,然后遍历父层次结构,直到找到Page,并从那里获取它。

如果它是GridView的成员,只需执行相同操作并遍历父结构,直到找到GridView。

修改

感谢您发布更多来源。看起来isHarnesstote对象的成员。如果是这种情况,您可能无法在DataBound事件中获取它。 tote只是一个局部变量,它超出了范围,并且很久就消失了。如果要在GridRowDataBound代码中访问它,可能需要将该值存储在其他位置。

例如,您可以将GridView扩展为具有IsHarness属性的自定义类,并在GetProbables函数中设置该值。然后,您可以通过适当地转换sender在GridRowDataBound事件中访问它。