如何在ASPXGridView EditFromTemplate中“绑定”不可见和未绑定的字段?

时间:2014-12-04 16:12:40

标签: asp.net devexpress aspxgridview

我有一个带编辑表单模板的ASPxGridView。此网格的DataSource是EntityServerModeSource,它是一个只读数据源。我使用这种组合是因为它将过滤和排序委托给数据库服务器。

为简单起见,我将介绍简化的方案。 我的EntityServerModeSource返回包含字段A,B和C的行。

我要做的更新如下。在EditFormTemplate中,我有控件,我绑定到字段A和B.类似于:

<asp:TextBox Text='<%# Bind("A")%>' />
<asp:TextBox Text='<%# Bind("B")%>' />

对于更新,我有一个存储过程,需要3个参数A,B和C.在ASPUGridView事件的RowUpdating中,我检查e.NewValues集合。问题是它只包含字段A和B而不包含C.这是预期的和正常的,因为字段C没有绑定到任何控件。例如。 NewValues [“C”]返回null。但是我需要C的旧值,所以我可以将它传递给存储过程,它需要所有三个。我不能仅仅构成一些值,因为这会覆盖数据库中的现有值。

我的hacky解决方案是在EditFormTemplate中创建一个虚拟控件,将它绑定到字段C并使其不可见:

<div style="display: none">
    <asp:TextBox Text= '<%# Bind("C")%>' />
</div>

现在,字段C已绑定,在RowUpdating事件中,我可以使用e.OldValue [“C”]访问它。 但这是一个hacky解决方案,我不喜欢它。有没有办法在代码隐藏中“绑定”字段C或以某种方式强制字段C出现在OldVaues和NewValues集合中?

1 个答案:

答案 0 :(得分:0)

要获取未绑定到UI元素的值,请使用ASPxGridView.GetRowValues方法。传递列的FocusedRowIndex和列名称,然后将其转换为所需的类型。

string C = ASPxGridView.GetRowValues(ASPxGridView.FocusedRowIndex, "C") as string;