2010-02-03 38 views
0

我有一个基于关闭位于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; 
       } 
      } 
     } 
+0

你设置Onclick事件的代码请 – TJMonk15 2010-02-03 18:24:51

回答

1

你应该把你的自定义GridView控制订阅CheckChanged事件的复选框。它应该自己调用它的SaveCheckBoxState方法。该方法应该是私人的。

父母和孩子控件只应通过属性和事件进行通信,而不能通过方法和字段进行通信。

+0

你能指点我解释如何做到这一点的任何参考? – 2010-02-03 18:27:33

+0

好吧,我可以通过Google搜索一段时间后得出结论。我使用http://www.dotnetspider.com/resources/16912-Computer-Power.aspx中的一个例子来弄清楚。谢谢你的提示! – 2010-02-03 19:39:46

相关问题