我是一名相对较新的开发人员,并且只在全职工作6个月左右,所以提前感谢您阅读和/或回答我的问题
我有一个数据中转中继器。在这个中继器中,我有一个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 :(得分:3)
您需要为复选框设置AutoPostBack=True
属性,并注册/分配通过UpdatePanel控件的Triggers
属性添加到UpdatePanel的所有控件的事件处理程序。
答案 1 :(得分:3)
复选框上的Autopostback导致SQLDatasource只恢复到原始的存储过程,因为它点击了页面加载而忽略了oncheckchanged事件。
我所做的是将所有数据绑定事件放在pageload中并将它们放在if (!IsPostBack)
子句中,这样当Autopostback命中时,它不会将SQLDS重新绑定到原始值。
这样,当autopostback发生时,没有任何东西可以做,它会按照预期的那样点击OnCheckedChanged事件。
感谢大家阅读和回复。
答案 2 :(得分:1)
ASP.NET Repeater有一个事件导致客户端往返发生。该事件称为ItemCommand。请查看此链接: - http://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.repeater.itemcommand.aspx
希望这有帮助
答案 3 :(得分:1)
我发现了一个类似的问题并解决了
此致
答案 4 :(得分:0)
首先,您需要将UpdatePanel
置于转发器之外,然后添加runat="server"
。您还应该将数据源控件带到转发器之外,并将其重用于转发器内部的所有GridView。
<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" ...>
答案 5 :(得分:-1)
实际上你的数据绑定方法可能在if(!ISPOSTBACK){}之外调用 条件,所以在ispostback块中调用这个方法,希望你的问题能解决。