@Aiti
2018-05-07T06:50:54.000000Z
字数 5575
阅读 202
未分类
下面这个例子就是通过一个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;
}