0

我有一个获取数据源的 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 时确定的布尔值,但不是 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();
}
4

1 回答 1

0

一如既往,答案是“视情况而定”。

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

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

如果它是 GridView 的成员,则只需这样做并遍历父结构,直到找到 GridView。

编辑

感谢您发布更多来源。它看起来像是对象isHarness的成员tote。如果是这种情况,您可能无法在 DataBound 事件中获取它。tote只是一个局部变量,它超出了范围并且早已不复存在。如果您想在 GridRowDataBound 代码中访问它,您可能需要将该值存储在其他地方。

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

于 2012-04-11T19:37:32.830 回答