2011-09-29 90 views
2

我是一个相对较新的开发人员,只是做这个做了大约6个月的全职没有发射,所以预先感谢您的阅读和/或回应我的问题OnCheckedChanged事件时复选框中继器内进行检查

我有一个数据绑定中继器。在这个转发器里面,我有一个gridview,SQLDS和2个复选框。这两个复选框都有一个OnCheckedChanged事件,AutoPostback设置为true。中继器也有一个OnItemDataBound事件。

这里是我的代码是如何布局的一个样本:

<asp:Repeater ID="Repeater1" OnItemDataBound="Repeater1_ItemDataBound"> 
     <ItemTemplate> 
      <asp:Panel> 
       <asp:UpdatePanel> 
        <ContentTemplate> 
         <asp:Checkbox ID="Checkbox1" Autopostback="True" OnCheckedChanged="CheckBox1_CheckedChanged"> 
         <asp:Checkbox ID="Checkbox2"Autopostback="True" OnCheckedChanged="CheckBox2_CheckedChanged"> 
         <asp:Gridview ID="Gridview1" DataSourceID="SqlDataSource1"> 
         <asp:SQLDataSource ID="SQLDataSource1" SelectCommand="SP1" SelectCommandType="StoredProcedure"> 
        </ContentTemplate> 
       </asp:UpdatePanel> 
      </asp:Panel> 
     </ItemTemplate> 
    </asp:Repeater> 

和C#

protected void Checkbox1_CheckedChanged(object sender, EventArgs e) 
    { 
     if (Checkbox1.Checked == true) 
      { 
       if (Checkbox2.Checked == true) 
        SqlDataSource1.SelectCommand = "SP1"; 
       else 
        SqlDataSource1.SelectCommand = "SP2"; 
      } 
      else 
       SqlDataSource1.SelectCommand = "SP3"; 
    } 
    protected void Checkbox2_CheckedChanged(object sender, EventArgs e) 
    { 
     if (Checkbox2.Checked == true) 
      { 
       if (Checkbox1.Checked == true) 
        SqlDataSource1.SelectCommand = "SP3"; 
       else 
        SqlDataSource1.SelectCommand = "SP2"; 
      } 
      else 
       SqlDataSource1.SelectCommand = "SP1"; 
    } 

    protected void Repeater1_ItemDataBound(object sender, RepeaterItemEventArgs e) 
    { 
     //Uses FindControl to Databind the GV and hides it if GV.Rows.Count==0 
    } 

我做这一切的AJAX的TabPanel内。我有另一个页面,这个代码完美的工作,但它不在另一个页面的中继器内。

本质上,我有一个页面加载gridview,并且两个复选框更改SP填充gridview。我遇到的问题是,当您取消选中复选框(他们开始检查)时,它会1.重新检查自身,并且2.不会触及CheckedChanged事件。

任何帮助将非常感激。

+0

我没有看到链接到eventhandlers和autpostback设置为true的复选框。你能证明你在做什么吗? –

+0

是的,对不起。它们在ASP标签中被设置为这样。 – RockiesMagicNumber

回答

3

将AutoPostBack上的复选框是导致SqlDataSource的只是恢复到原来的存储过程,因为它击中页面加载,只是忽略了oncheckchanged事件。

我所做的是将页面加载中的所有数据绑定事件都放入if (!IsPostBack)子句中,以便在Autopostback命中时,它不会将SQLDS重新绑定为原始值。

这样,当发生自动回复时,没有任何事情可以做,并且它按照它的设想打开OnCheckedChanged事件。

谢谢大家阅读和回复。

3

您需要设置AutoPostBack=True属性的复选框,并注册/分配哪些是通过UpdatePanel控件的Triggers属性添加到UpdatePanel的所有控件的事件处理程序。

+0

我这样做,设置'AutoPostBack = True',并在UpdatePanel上以'和'' - 问题依然存在,复选框没有触及checkedchanged事件。 – RockiesMagicNumber

0

首先,你需要把UpdatePanel外的中继器,并添加runat="server"。您还应该将数据源控件带到中继器外部,并将其重用于中继器内部的所有GridViews。

<asp:UpdatePanel ID="UpdatePanel1" runat="server"> 
    <ContentTemplate> 
     <asp:Repeater ID="Repeater1" runat="server"> 
      <ItemTemplate> 
       <!-- checkboxes --> 
       <!-- gridview --> 
      </ItemTemplate> 
     </asp:Repeater> 
    </ContentTemplate> 
</asp:UpdatePanel> 
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ...> 
+0

@RockiesMagicNumber:请参阅我的答案。我认为这会解决你的问题。 –

-1

其实你的数据绑定方法可能在if(!ISPOSTBACK){} 条件,所以在ispostback块内调用这个方法,我希望你的问题能够解决。

相关问题