我有一个基于关闭位于GridView控件自定义控件创建一个子控件:here如何在自定义控件的引用添加到一个方法在相同的自定义控制
控制基本上是一个gridview自动创建一列复选框,可用于“检查”gridview中的单个行。 在gridview的“CreateColumns”事件中,“checkboxcolumn”是动态创建的。复选框列中还包含另一个复选框,用于在列中“选择/取消选择所有”复选框。
由于gridview并没有自动记住回发中复选框列的复选框的状态,我在控件中添加了一个名为“SaveCheckBoxState”的方法,该方法存储Viewstate中检查行的索引,然后修改了“ OnRowDataBound“事件来检查Viewstate并根据Viewstate重置复选框。
然后,我在gridview的OnSorting和OnPageIndexChanging事件中添加了对“SaveCheckBoxState”的调用。只要我正在排序或更改页面,这项工作就非常棒。
但是,我需要它来每次有人点击或取消点击其中一个复选框时更新视图状态。此时,复选框会显示一个onclick事件,该事件调用一些javascript来突出显示该行,或者在标题中的复选框中选择/取消选中所有复选框。
我需要从自定义控件使用的javascript调用“SaveCheckBoxState”方法,或者我需要找到一种方法来从javascript修改viewstate并执行与“SaveCheckBoxState”相同的操作。
我已经尝试添加“SaveCheckBoxState”到复选框中的onclick事件声明,但运行时,它只是告诉我该方法是未定义的。它不存在于父页面中,我认为我不应该为父页面传递点击事件。在我看来,这应该是全部包含在自定义控件中。
有谁知道我该如何实现这一目标?
这里是设置复选框的onclick事件为GridView的OnPreRender事件中的代码:
protected override void OnPreRender(EventArgs e)
{
// Do as usual
base.OnPreRender(e);
// Adjust each data row
foreach (GridViewRow r in Rows)
{
// Get the appropriate style object for the row
TableItemStyle style = GetRowStyleFromState(r.RowState);
// Retrieve the reference to the checkbox
CheckBox cb = (CheckBox)r.FindControl(InputCheckBoxField.CheckBoxID);
// Build the ID of the checkbox in the header
string headerCheckBoxID = String.Format(CheckBoxColumHeaderID, ClientID);
// Add script code to enable selection
cb.Attributes["onclick"] = String.Format("ApplyStyle(this, '{0}', '{1}', '{2}')",
SelectedRowStyle.CssClass,
style.CssClass,
headerCheckBoxID);
// Update the style of the checkbox if checked
if (cb.Checked)
{
r.BackColor = SelectedRowStyle.BackColor;
r.ForeColor = SelectedRowStyle.ForeColor;
r.Font.Bold = SelectedRowStyle.Font.Bold;
}
else
{
r.BackColor = style.BackColor;
r.ForeColor = style.ForeColor;
r.Font.Bold = style.Font.Bold;
}
}
}
你设置Onclick事件的代码请 – TJMonk15 2010-02-03 18:24:51