首先,您两者都不想做。这违反了用户控制的概念。
如果你想使用用户控件的状态来修改gridview,你可以暴露控件的状态并使gridview根据这个状态来运行。
// This handles rowdatabound of gridview
OnRowDataBound(object sender, RowDataBoundEventArgs e)
{
var control = e.Row.Find("UserControlId");
if (control.SomeProperty == SomeValue)
someTextBox.Value = "something";
}
如果确实需要将gridview的句柄传递给用户控件,可以在grid view类型的用户控件上定义一个属性:
// This is a property of user control
public GridView Container { get; set; }
在访问之前将控件的容器设置为gridview。
userControl.Container = gridView;
如果用户控件是网格上的 itemtemplate 的一部分,由于您的用户控件是在创建 gridview 的行时创建的,因此您只能在绑定 gridview 后进行此操作。
最后,为了调用容器页面上的函数,您可以在用户控件中公开一个事件并绑定到该事件。
public delegate void SomethingHappenedEventHandler(object sender, EventArgs e);
// In user control:
public event SomethingHappenedEventHandler SomethingHappened;
// Trigger inside a method in user control:
SomethingHappenedEventHandler eh = SomethingHappened;
if (eh != null) eh(this, EventArgs.Empty);
// In page:
userControl.SomethingHappened = new SomethingHappendEventHandler(OnSomething);
private void OnSomething(object sender, EventArgs e)
{
// When something happens on user control, this will be called.
}