ASPxGridView 自定义回调
ASPxGridView CustomCallback
这是我的 ASPxGridView 的 aspx 代码
<dx:ASPxGridView ID="dgJournalList" runat="server" ClientInstanceName="dgJournalList"
OnCustomCallback="dgJournalList_CustomCallback"
OnCustomJSProperties="dgJournalList_CustomJSProperties"
KeyFieldName="LineNo" AutoGenerateColumns="False">
<SettingsPager Visible="False">
</SettingsPager>
<SettingsDataSecurity AllowDelete="False" AllowEdit="False" AllowInsert="False" />
<Columns>
<dx:GridViewDataTextColumn FieldName="ItemNo" VisibleIndex ="1"
ReadOnly="true" Visible="true">
</dx:GridViewDataTextColumn>
<dx:GridViewDataTextColumn FieldName="PostingDateStr" VisibleIndex ="2"
ReadOnly="true" Visible="true">
</dx:GridViewDataTextColumn>
<dx:GridViewDataTextColumn FieldName="EntryTypeStr" VisibleIndex ="3"
ReadOnly="true" Visible="true">
</dx:GridViewDataTextColumn>
<dx:GridViewDataTextColumn FieldName="DocumentNo" VisibleIndex ="4"
ReadOnly="true" Visible="true">
</dx:GridViewDataTextColumn>
<dx:GridViewDataTextColumn FieldName="LocationCode" VisibleIndex ="5"
ReadOnly="true" Visible="true">
</dx:GridViewDataTextColumn>
<dx:GridViewDataTextColumn FieldName="Qty" VisibleIndex ="6"
ReadOnly="true" Visible="true">
</dx:GridViewDataTextColumn>
<dx:GridViewDataTextColumn FieldName="UOM" VisibleIndex ="7"
ReadOnly="true" Visible="true">
</dx:GridViewDataTextColumn>
</Columns>
<ClientSideEvents EndCallback ="onEndCallback(s, e)" />
</dx:ASPxGridView>
来自 javascript
的函数
onButtonClick = function (args)
{
switch (args)
{
case 'refresh':
dgJournalList.PerformCallback('Refresh');
break;
}
}
以及回调方法
protected void dgJournalList_CustomCallback(object sender, ASPxGridViewCustomCallbackEventArgs e)
{
string[] param = e.Parameters.Split(separator, StringSplitOptions.None);
BOResponse objResponse = new BOResponse();
switch (param[0])
{
case "Refresh":
objResponse = GetListJournal(null);
if (objResponse.MsgCode != 0)
{
dgJournalList.JSProperties["cpErrMsg"] = objResponse.MsgDesc;
}
dgJournalList.DataSource = JournalList;
dgJournalList.DataBind();
dgJournalList.FocusedRowIndex = 0;
break;
}
}
执行刷新操作时,我的应用程序没有回调,而是执行回发,因为在调试时,没有到达回调方法处的断点;它在 Page_Load
方法处遇到断点。
我的代码哪里出错了?
您看到的是正常行为。回发意味着完整的页面重新加载。你观察你的情况吗?根据您发布的代码,您不应该这样做。您应该只看到网格区域重新加载。
Page_Init
和 Page_Load
事件将在您在 Javascript 中调用 dgJournalList.PerformCallback('Refresh');
后触发。然后控件将交给您的 dgJournalList_CustomCallback
方法。
如果您不希望在网格的自定义回调期间执行 Page_Init
和 Page_Load
逻辑,则将以下检查添加到这些事件处理程序中:
if (!IsPostBack && !IsCallback)
{
// your code which is run ONLY at initial page load should be put here
}
如果您需要 运行 Page_Init 和 Page_Load 在某些确实会导致回传的按钮点击期间进行编码,请从上述条件中删除 IsPostBack
部分。
有关该主题的更多信息:
- ASP.NET Page Life Cycle Overview - 微软文档
- The Concept of Callbacks - DevExpress 文档
按钮 AutoPostback 属性 应该为 false 以避免页面回发。
<dx:ASPxButton id="btnSave" runat="server" AutoPostback="false"/>
这是我的 ASPxGridView 的 aspx 代码
<dx:ASPxGridView ID="dgJournalList" runat="server" ClientInstanceName="dgJournalList"
OnCustomCallback="dgJournalList_CustomCallback"
OnCustomJSProperties="dgJournalList_CustomJSProperties"
KeyFieldName="LineNo" AutoGenerateColumns="False">
<SettingsPager Visible="False">
</SettingsPager>
<SettingsDataSecurity AllowDelete="False" AllowEdit="False" AllowInsert="False" />
<Columns>
<dx:GridViewDataTextColumn FieldName="ItemNo" VisibleIndex ="1"
ReadOnly="true" Visible="true">
</dx:GridViewDataTextColumn>
<dx:GridViewDataTextColumn FieldName="PostingDateStr" VisibleIndex ="2"
ReadOnly="true" Visible="true">
</dx:GridViewDataTextColumn>
<dx:GridViewDataTextColumn FieldName="EntryTypeStr" VisibleIndex ="3"
ReadOnly="true" Visible="true">
</dx:GridViewDataTextColumn>
<dx:GridViewDataTextColumn FieldName="DocumentNo" VisibleIndex ="4"
ReadOnly="true" Visible="true">
</dx:GridViewDataTextColumn>
<dx:GridViewDataTextColumn FieldName="LocationCode" VisibleIndex ="5"
ReadOnly="true" Visible="true">
</dx:GridViewDataTextColumn>
<dx:GridViewDataTextColumn FieldName="Qty" VisibleIndex ="6"
ReadOnly="true" Visible="true">
</dx:GridViewDataTextColumn>
<dx:GridViewDataTextColumn FieldName="UOM" VisibleIndex ="7"
ReadOnly="true" Visible="true">
</dx:GridViewDataTextColumn>
</Columns>
<ClientSideEvents EndCallback ="onEndCallback(s, e)" />
</dx:ASPxGridView>
来自 javascript
的函数onButtonClick = function (args)
{
switch (args)
{
case 'refresh':
dgJournalList.PerformCallback('Refresh');
break;
}
}
以及回调方法
protected void dgJournalList_CustomCallback(object sender, ASPxGridViewCustomCallbackEventArgs e)
{
string[] param = e.Parameters.Split(separator, StringSplitOptions.None);
BOResponse objResponse = new BOResponse();
switch (param[0])
{
case "Refresh":
objResponse = GetListJournal(null);
if (objResponse.MsgCode != 0)
{
dgJournalList.JSProperties["cpErrMsg"] = objResponse.MsgDesc;
}
dgJournalList.DataSource = JournalList;
dgJournalList.DataBind();
dgJournalList.FocusedRowIndex = 0;
break;
}
}
执行刷新操作时,我的应用程序没有回调,而是执行回发,因为在调试时,没有到达回调方法处的断点;它在 Page_Load
方法处遇到断点。
我的代码哪里出错了?
您看到的是正常行为。回发意味着完整的页面重新加载。你观察你的情况吗?根据您发布的代码,您不应该这样做。您应该只看到网格区域重新加载。
Page_Init
和 Page_Load
事件将在您在 Javascript 中调用 dgJournalList.PerformCallback('Refresh');
后触发。然后控件将交给您的 dgJournalList_CustomCallback
方法。
如果您不希望在网格的自定义回调期间执行 Page_Init
和 Page_Load
逻辑,则将以下检查添加到这些事件处理程序中:
if (!IsPostBack && !IsCallback)
{
// your code which is run ONLY at initial page load should be put here
}
如果您需要 运行 Page_Init 和 Page_Load 在某些确实会导致回传的按钮点击期间进行编码,请从上述条件中删除 IsPostBack
部分。
有关该主题的更多信息:
- ASP.NET Page Life Cycle Overview - 微软文档
- The Concept of Callbacks - DevExpress 文档
按钮 AutoPostback 属性 应该为 false 以避免页面回发。
<dx:ASPxButton id="btnSave" runat="server" AutoPostback="false"/>