如何根据网格选中行修改PXAction按钮标题?RowSelected事件无法触发
可行解决方案
针对你遇到的Grid RowSelected事件不触发,无法根据选中行字段修改PXAction按钮标题的问题,以下是几种可行的实现方式:
方法一:客户端脚本监听行选中事件 + 服务器端回调
通过客户端捕获网格行选中事件,获取目标字段值后调用服务器端方法生成新标题,再更新按钮文本:
- 在ASPX的网格控件中添加客户端
RowSelected事件绑定:
<px:PXGrid ID="grid" runat="server" DataSourceID="ds" ...> <ClientEvents RowSelected="grid_RowSelected" /> <!-- 其他网格配置 --> </px:PXGrid>
- 编写客户端脚本处理选中事件并发起回调:
function grid_RowSelected(sender, eventArgs) { // 获取选中行的目标字段值(替换为你的字段名) var targetFieldValue = eventArgs.row.getDataKeyValue('YourDACFieldName'); // 调用服务器端WebMethod更新按钮标题 px_callback('GenerateButtonTitle', [targetFieldValue], function(response) { // 通过Action的ID获取按钮控件并更新文本 var actionBtn = px_controls['YourActionID']; if (actionBtn) { actionBtn.text(response.d); } }); }
- 服务器端添加WebMethod生成按钮标题:
[PXWebMethod(Session = true)] public static string GenerateButtonTitle(string fieldValue) { // 根据业务需求生成标题,示例为拼接字段值 return $"处理: {fieldValue}"; }
方法二:启用网格AutoPostBack + 复用RowSelected事件
如果之前未开启网格的AutoPostBack,RowSelected事件不会在选中行时触发。开启后即可通过RowSelected事件更新按钮标题:
- 在ASPX中开启网格的AutoPostBack:
<px:PXGrid ID="grid" runat="server" AutoPostBack="True" DataSourceID="ds" ...> </px:PXGrid>
- 在RowSelected事件中更新Action标题:
protected void Grid_RowSelected(PXCache cache, PXRowSelectedEventArgs e) { var selectedRow = e.Row as YourDACType; if (selectedRow != null) { // 替换为你的PXAction实例和目标字段 YourPXActionInstance.SetCaption($"操作: {selectedRow.TargetField}"); } }
注:如果是多选网格,可通过PXSelection获取所有选中行,再根据需求取对应行的字段值。
方法三:利用PXSelection跟踪选中行,在页面回发时更新
通过Acumatica的PXSelection机制获取当前选中行,在页面回发时更新按钮标题:
protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) return; // 获取网格的选中行集合(替换为你的DAC类型和网格实例) var selectedRows = PXSelectorAttribute.GetSelection<YourDAC>(grid.Cache, grid); if (selectedRows.Count > 0) { var firstSelectedRow = selectedRows[0] as YourDAC; // 更新Action标题 YourPXActionInstance.SetCaption($"执行: {firstSelectedRow.TargetField}"); } }
内容的提问来源于stack exchange,提问作者pmfith
相关产品推荐
相关产品推荐

