我有一个Gridview边界字段,我将ReadOnly设置为true,因为我不希望用户更改其值。但是在objectdatasource控件的update方法中,当我尝试将它用作update方法中的参数时,boundfield变为null。有没有办法在更新期间设置该值?
答案 0 :(得分:5)
不,只需将您需要的字段名称添加到GridView的DataKeyNames属性中。然后该值将发送到Update命令。
答案 1 :(得分:3)
当您在GridView上将字段标记为只读时,它会在页面上呈现为span元素,而不是输入。因此,PostBack上没有该值。如果您可以构造更新语句以使其不期望该字段,那么这将是处理此问题的最佳方法。如果更新语句是自动生成的,并且您无法绕过具有要更新的值,那么您可以在执行更新之前从数据库读取值(以便您拥有它)或包含绑定到此列的HiddenField并使用通过Eval获取值而不是绑定(如果需要)的文字。这将需要使用模板。
<asp:TemplateField>
<InsertItemTemplate>
<asp:TextBox runat="server" ID="itemTextBox" />
</InsertItemTemplate>
<EditItemTemplate>
<asp:HiddenField runat="server" ID="itemHF" Value='<% Bind("Item") %>' />
<asp:Label runat="server" ID="itemLabel" Text='<% Eval("Item") %>' />
</EditItemTemplate>
<ItemTemplate>
<asp:Label runat="server" ID="itemLabel" Text='<% Bind("Item") %>' />
</ItemTemplate>
</asp:TemplateField>
答案 2 :(得分:0)
另一种方法是向tableadapter添加新查询。创建仅使用要更新的字段的更新查询。在ODS上选择更新方法时,选择更新查询。不属于更新查询的BoundField现在可以转为readonly = true,它应该可以工作。
答案 3 :(得分:0)
我有类似的问题并以稍微不同的方式解决了它。但在我的情况下,我想在我的Update方法中使用的参数是我的主键,并且在查询字符串中可用。所以在我的DataSource定义中,我定义了要使用的UpdateParameters部分而不是。然后我能够从我的表中完全删除参数,它将恢复为查询字符串参数。