我有一个DevExpress gridview,其中包含以下设置。
settings.Name = "DetailGridView";
// this calls DetailGridView.StartEditRow() on client side
settings.ClientSideEvents.RowClick = "Fn.startEditingRow";
settings.SettingsEditing.Mode = DevExpress.Web.GridViewEditingMode.Inline;
为了简单起见,我删除了许多其他设置,但询问您是否认为我需要显示其他相关设置。
现在我想在每次单元格点击时调用JavaScript函数。为此,我已根据this SO answer和this DevExpress thread
添加了此设置settings.HtmlDataCellPrepared += (sender, e) =>
{
string onClickFunctionJS = "Fn.DetailOnlyOnCellClick({0},'{1}');";
e.Cell.Attributes.Add("onclick", String.Format(onClickFunctionJS, e.VisibleIndex, e.DataColumn.FieldName));
};
JS函数Fn.DetailOnlyOnCellClick()
打印以控制字段名称的值(第二个参数)。但它只在第一次单击该行时打印单击的单元格的字段名称。之后,单击所选行中的另一个单元格不再触发函数Fn.DetailOnlyOnCellClick()
。我观察到,如果我关闭ClientSideEvents.RowClick
,它可以正常工作,但由于其他原因我无法将其关闭。如何在保持ClientSideEvents.RowClick
的同时获取用户点击的单元格?
答案 0 :(得分:0)
感谢DevExpress支持中心解决了我的问题。首先,我无法使用settings.HtmlDataCellPrepared
,因为正如我在问题中所提到的,网格视图在单击行时进入编辑模式,而在编辑模式settings.HtmlDataCellPrepared
不应该按照我的方式工作需要它为我的情况。所以我开始使用这段代码:
settings.CellEditorInitialize = (s, e) =>
{
var elementEditor = e.Editor;
string onClickFunctionJS = "DetailOnlyOnCellClick({0},'{1}');";
DevExpress.Web.Rendering.GridViewTableInlineEditorCell cell =
elementEditor.Parent as DevExpress.Web.Rendering.GridViewTableInlineEditorCell;
cell.Attributes.Add("onclick",
String.Format(onClickFunctionJS, e.VisibleIndex, e.Column.FieldName));
};
此代码适用于每个不同的控件。唯一的问题是当该字段是一个复选框并且该单元格被禁用时。为了解决这个问题,我已将此代码用于复选框控件:
string func = String.Format(
"ASPxClientUtils.AttachEventToElement(s.GetMainElement(), 'click', function() {{ {0} }} )",
String.Format(onClickFunctionJS, e.VisibleIndex, e.Column.FieldName));
(elementEditor as ASPxCheckBox).ClientSideEvents.Init = String.Format("function(s,e){{ {0}; }}", func);
此代码完美无缺。
使用两种方法的链接:
P.S。:我在这里展示的这些方法都来自DevExpress专家,我从DevExpress的支持中心得到了这些答案。一旦我能用许可证解决问题并且票证公开,我将提供我的问题的链接。