我有一个获取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();
}
答案 0 :(得分:0)
答案一如既往地是"它取决于"。
我们对你的bool isHarness
了解不多。这个变量的范围是什么?它是页面的成员吗? GridView的成员?它是GridView数据源的一部分吗?
如果它是页面的公共成员,则可以从您的方法中将sender
强制转换为Web控件,然后遍历父层次结构,直到找到Page,并从那里获取它。
如果它是GridView的成员,只需执行相同操作并遍历父结构,直到找到GridView。
修改的
感谢您发布更多来源。看起来isHarness
是tote
对象的成员。如果是这种情况,您可能无法在DataBound事件中获取它。 tote
只是一个局部变量,它超出了范围,并且很久就消失了。如果要在GridRowDataBound代码中访问它,可能需要将该值存储在其他位置。
例如,您可以将GridView扩展为具有IsHarness
属性的自定义类,并在GetProbables
函数中设置该值。然后,您可以通过适当地转换sender
在GridRowDataBound事件中访问它。