问题:关于GridView boundfield ReadOnly属性

时间:2008-11-25 00:23:35

标签: asp.net

我有一个Gridview边界字段,我将ReadOnly设置为true,因为我不希望用户更改其值。但是在objectdatasource控件的update方法中,当我尝试将它用作update方法中的参数时,boundfield变为null。有没有办法在更新期间设置该值?

4 个答案:

答案 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部分而不是。然后我能够从我的表中完全删除参数,它将恢复为查询字符串参数。