2010-08-06 55 views
2

我已经设置了一个DataGrid,其中包含多个列,并在该行的末尾添加了复选框和列。DataGrid按钮 - 回发或回调无效

我也在更改OnItemCreated事件上的数据网格布局,该事件通过使用“Rowspan”属性扩展行来更改数据网格的布局,并删除不再需要的额外列和控件。

原始数据网格布局是设置这样的:

___________________________________________ 
| 1 | Employee Name | 01/08/10 |[] |[SAVE]| 
| 1 | Employee Name | 02/08/10 |[] |[SAVE]| 
___________________________________________ 
| 2 | Employee Name | 01/08/10 |[] |[SAVE]| 
___________________________________________ 
| 3 | Employee Name | 04/08/10 |[] |[SAVE]| 
| 3 | Employee Name | 05/08/10 |[] |[SAVE]| 
| 3 | Employee Name | 06/08/10 |[] |[SAVE]| 
___________________________________________ 
| 4 | Employee Name | 03/08/10 |[] |[SAVE]| 
___________________________________________ 

而现在它看起来像这样具有扩展行,去掉了控件和数据网格列删除...

___________________________________________ 
| 1 | Employee Name | 01/08/10 |[] |[SAVE]| 
| |    | 02/08/10 | |  | 
___________________________________________ 
| 2 | Employee Name | 01/08/10 |[] |[SAVE]| 
___________________________________________ 
| 3 | Employee Name | 04/08/10 |[] |[SAVE]| 
| |    | 05/08/10 | |  | 
| |    | 06/08/10 | |  | 
___________________________________________ 
| 4 | Employee Name | 03/08/10 |[] |[SAVE]| 
___________________________________________ 

的页面在打开时显示,并且每次用户单击页码时,页面控件都按预期工作。

但是,当我点击特定员工的[SAVE]按钮时,错误消息显示类似“无效回传或回叫”的消息。我知道这是我在数据网格中删除的控件和列的结果,而事件验证与原始渲染项目不匹配。

我不想删除EnableEventValidation,因为这是一个安全问题。

我知道我必须使用Render方法来修复在页面显示之前所做的任何更改,但是如何解决此回发问题?

回答

0

好吧,让我们看看错误来自哪里。

GridView是使用__DoPostBack()javascript调用,并没有他自己的输入。因此,他自己不会从其他单元发送任何输入数据。

现在我认为你没有做出自定义DoPostBack调用 - 对吗?

验证的第二点是ViewState Data。

是否有任何更改使用任何UpdatePanel,并在中间进行更改此ViewState的更新?

我建议你尝试的是发送EnableViewState =“false”在你的GridView上看看你是否仍然得到这个错误。这不会影响您,因为每个更新中的GridView会重新读取需要创建的数据。

第二点,你需要检查,是你改变你的数据和观察状态。也许把它放在其他地方解决问题。例如,如果您在Page_Load上使用它,也许您需要将它移动到PageInit上 - 或者反之亦然。

希望得到这个帮助。

+0

嗨Aristos, 是的,我有一个更新面板中的数据网格,现在已禁用EnableViewState。该按钮现在可以正常工作,并且可以按预期方式读取复选框的值。 但是,无论我处于哪个页面,页面编号都会重置回第1页。如果我现在无法从数据网格中检索视图状态的值,我该如何获取页码? 谢谢。 – 2010-08-08 22:49:08

+0

@laughing无法保持页面与读取数据的地方有关 - 您要执行Bind()并在datagrid上设置数据。你在寻呼机之后有地方,所以失去它。改变你在datagrid上设置数据的点,例如在pageinit上移动它并检查它。这可能是一开始就存在的问题。 – Aristos 2010-08-09 05:34:57

+0

我改变了重新绑定数据的位置,并且数据网格按预期工作。 – 2010-08-10 03:21:45

相关问题