@Aiti
2018-05-07T06:50:54.000000Z
字数 5575
阅读 248
未分类
下面这个例子就是通过一个ListBox,从客户端回调AspxCallbackPanel,从而更新AspxCallbackPanel内的MultiView控件显示
信息。
首选,先在页面中放置一个AspxCallbackPanel控件,并设置ClientInstanceName属性为“CallbackPanel”,其作用就是通过客户
端的javascript脚本引用ASPxCallbackPanel控件。
<dxcp:ASPxCallbackPanel ID="ASPxCallbackPanel" runat="server" ClientInstanceName="CallbackPanel"
OnCallback="ASPxCallbackPanel_Callback" Width="100%">
</dxcp:ASPxCallbackPanel>
接下来再放置一个MultiView控件,设置多个View,让他显示不同的内容,注意,MultiView是放置在ASPCallbackPane的中。如下
<dxcp:ASPxCallbackPanel ID="ASPxCallbackPanel" runat="server" ClientInstanceName="CallbackPanel"OnCallback="ASPxCallbackPanel_Callback" Width="100%"><PanelCollection><dxp:PanelContent ID="PanelContent1" runat="server"><asp:MultiView ID="MultiView" runat="server"><asp:View ID="View1" runat="server"><table><tr><td valign="top"><dxe:ASPxLabel ID="ASPxLabel1" runat="server" Text="♣我是谁?不要告诉我是上班族,现在的上班族太民工;不要告诉我是民工,现在民工太缺钱;不要告诉我是富翁,富翁大都是暴发户;不要告诉我是暴发户,暴发户都想当明星;不要告诉我是明星,现在明星就像上班族。"Font-Bold="True"></dxe:ASPxLabel></td></tr></table></asp:View><asp:View ID="View2" runat="server"><table><tr><td valign="top"><dxe:ASPxLabel ID="ASPxLabel3" runat="server" Text="♣许多人不知道自己失去过什么,而时间总是耐心地给出答案。看着过去失去的东西,会有一种心痛的感觉!算是一种悔悟吧!"Font-Bold="True"></dxe:ASPxLabel></td></tr></table></asp:View><asp:View ID="View3" runat="server"><table><tr><td valign="top"><dxe:ASPxLabel ID="ASPxLabel5" runat="server" Text="♣一个人吻你,你一定被人深爱;不少人吻你,你一定是个漂亮的小孩;非常多的人吻你,你会被口水淹死"Font-Bold="True"></dxe:ASPxLabel></td></tr></table></asp:View></asp:MultiView></dxp:PanelContent></PanelCollection></dxcp:ASPxCallbackPanel>
然后,在页面中添另一个ListBox,用来控制显示NulitView中的哪一个View,如下:
dxe:ASPxListBox ID="ASPxListBox1" runat="server" ClientInstanceName="ListBox" Height="83px"><Items><dxe:ListEditItem Text="雷语1" Value="0" /><dxe:ListEditItem Text="雷语2" Value="1" /><dxe:ListEditItem Text="雷语3" Value="2" /></Items><ClientSideEvents SelectedIndexChanged="function(s, e) {var item = ListBox.GetSelectedItem();CallbackPanel.PerformCallback(item.value); <!--此行就是调用AspxCallbackPanel的回调方法 -->}" Init="function(s, e) {ListBox.SetSelectedIndex(0);CallbackPanel.PerformCallback(0);}"/></dxe:ASPxListBox>
最后是服务器代码:
protected void ASPxCallbackPanel_Callback(object source, CallbackEventArgsBase e){MultiView.ActiveViewIndex = Convert.ToInt32(e.Parameter);}
当客户端触发ListBox的SelectedIndexChanged事件时,就会执行在ListBox客户端注册的如下代码
SelectedIndexChanged="function(s, e) {var item = ListBox.GetSelectedItem();CallbackPanel.PerformCallback(item.value); //此行执行ASPxCallbackPanel的回调,即服务器事件ASPxCallbackPanel_Callback。}"说明:AspxCallbackPanel的PerformCallback的方法原型:function PerformCallback(parameter : String) : Void;
其中传递的参数可通过AspxCallbackPanel的Callback事件中的 CallbackEventArgsBase得到,如服务器端代码。
PerformCallback的回调还可用于ASPxDataView 等控件,使用方法均相同。
下面GrideView控件
<dx:ASPxGridView ID="gvAll" runat="server" ClientInstanceName="gvAll" AutoGenerateColumns="False" DataSourceID="XpoDs" ClientIDMode="Static" KeyFieldName="Oid" OnAfterPerformCallback="gvAll_AfterPerformCallback"><ClientSideEvents EndCallback="gvCB" SelectionChanged="function(s,e){ShowGV(s,e);}"/><Columns></dx:GridViewCommandColumn><dx:GridViewDataTextColumn FieldName="Name" VisibleIndex="3"></dx:GridViewDataTextColumn><dx:GridViewDataTextColumn FieldName="Nums" VisibleIndex="4"></dx:GridViewDataTextColumn><dx:GridViewDataTextColumn FieldName="MapLat" VisibleIndex="5"></dx:GridViewDataTextColumn><dx:GridViewDataTextColumn FieldName="MapLng" VisibleIndex="6"></dx:GridViewDataTextColumn></Columns><SettingsBehavior AllowSelectSingleRowOnly="true" /></dx:ASPxGridView>
把需要更新的控件放在ASPxCallbackPanel控件中
<dx:ASPxCallbackPanel ID="ASPxCallbackPanel" runat="server" ClientInstanceName="CallbackPanel" OnCallback="ASPxCallbackPanel_Callback" Width="100%"><PanelCollection><dx:PanelContent ID="PanelContent1" runat="server"><!-- 这里放需要异步更新的控件,从Js客户端回调AspxCallbackPanel,从而更新AspxCallbackPanel内的控件显示信息。--></dx:PanelContent></PanelCollection></dx:ASPxCallbackPanel>
如下
<dx:ASPxCallbackPanel ID="ASPxCallbackPanel" runat="server" ClientInstanceName="CallbackPanel" OnCallback="ASPxCallbackPanel_Callback" Width="100%"><PanelCollection><dx:PanelContent ID="PanelContent1" runat="server"><asp:Repeater runat="server" ClientIDMode="Static" ID="rptMeetRoom" DataSourceID="XpoDs"><ItemTemplate><a style="text-decoration:none" onclick='gvAll.StartEditRow(<%# Container.ItemIndex%>);return false;' ><div runat="server" class="m_rooms"><span style="font-size:16px;font-weight: bold; "><%# Eval("Name") %> </span><span style="color:#333333;display: block; margin-top: -60px;"><%# "可容纳"+Eval("Nums")+"人" %></span></div></a></ItemTemplate></asp:Repeater><a style="text-decoration:none" onclick="gvAll.AddNewRow(); return true; "><div runat="server" id="NewRoom" class="m_rooms"><span style="color:#333333;font-size:50px;opacity:0.5;line-height:12px;">+</span><span style="color:#333333;display: block;margin-top: -60px;">新建会议室</span></div></a></dx:PanelContent></PanelCollection></dx:ASPxCallbackPanel>
重点就是如何通过JS调用ASPxCallbackPanel的回调,通过改变选择行触发事件
function ShowGV(s, e) {CallbackPanel.PerformCallback();}
GridView新建时属于回调,不能刷新页面,所以用到OnAfterPerformCallback事件。循环使用0/1行点击,后台如下:
if (!IsPostBack){Session["SelectRow"] = 0;}if (Session["SelectRow"] != null && int.Parse(Session["SelectRow"].ToString())==2){Session["SelectRow"] = 0;}protected void ASPxCallbackPanel_Callback(object sender, CallbackEventArgsBase e){XpoDs.Criteria = CriteriaOperator.Parse("Scope=?", ScopeHelper.CurrentScope()).ToString();rptMeetRoom.DataBind();rptTask.DataBind();}protected void gvAll_AfterPerformCallback(object sender, ASPxGridViewAfterPerformCallbackEventArgs e){gvAll.Selection.SelectAll();int index = int.Parse(Session["SelectRow"] == null ? "0" : Session["SelectRow"].ToString());gvAll.Selection.SelectRow(index);index++;Session["SelectRow"] = index;}