【问题标题】:Error rendered when updating Gridview, only occurs when boundfield readonly is set to true更新 Gridview 时出现错误,仅在 boundfield readonly 设置为 true 时发生
【发布时间】:2014-08-24 18:33:52
【问题描述】:

我有一个脱离 sql​​DataSource 运行的 GridView,它允许插入和更新数据。但是,插入数据后,“UpdatedBY”不应由用户编辑。因此,我向该绑定列添加了一个只读属性并将其设置为 true,这会在尝试编辑/更新列时生成以下错误:必须声明标量变量“@UpdateBY”。注意:仅当我在“UpdateBY”列上实现只读属性时才会发生错误。删除后,更新 Grid 时没有错误,但我不希望用户能够修改 UpdateBY 列

超文本:

 <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" 
        DataKeyNames="Mode_ID" DataSourceID="SqlDataSource1"  
     AutoGenerateEditButton="True" AllowPaging="True" AllowSorting="True">
     <Columns>
        <asp:BoundField DataField="Mode_ID" HeaderText="Mode ID" SortExpression="Mode_ID" Visible="false" />

        <asp:BoundField DataField="ShipMode" HeaderText="Ship Mode" SortExpression="ShipMode" />

         <asp:TemplateField HeaderText="Active" SortExpression="Active">
             <EditItemTemplate>
                 <asp:CheckBox ID="chkactive" runat="server" Checked='<%# Bind("Active") %>'></asp:CheckBox>
             </EditItemTemplate>
             <ItemTemplate>
                 <asp:CheckBox ID="CheckBox1" runat="server" Checked='<%# Bind("Active") %>'></asp:CheckBox>
             </ItemTemplate>
         </asp:TemplateField>

        <asp:BoundField DataField="UpdateDate" HeaderText="Update Date" SortExpression="UpdateDate" />

        <asp:BoundField DataField="UpdateBY" HeaderText="Update BY" SortExpression="UpdateBY" ReadOnly="true"  />
     </Columns>
    </asp:GridView> 

...SQL 数据源:

 <asp:SqlDataSource 
    ID="SqlDataSource1" 
    ConnectionString="<%$ ConnectionStrings:ShipperNotificationConnectionString %>" 
    SelectCommand="SELECT Mode_ID, ShipMode, Active, UpdateDate, UpdateBY FROM [ShipMode]" 
    UpdateCommand="UPDATE ShipMode SET ShipMode=@ShipMode,
    Active=@Active,UpdateDate=@UpdateDate, UpdateBY=@UpdateBY
    WHERE Mode_ID=@Mode_ID"
   InsertCommand="INSERT ShipMode (ShipMode,Active,UpdateDate,UpdateBY)
            VALUES (@ShipMode,@Active,@UpdateDate,@UpdateBY)"    
   runat="server" 
        />

我可以就我缺少/无法理解的内容获得一些帮助吗?

【问题讨论】:

    标签: asp.net vb.net gridview


    【解决方案1】:

    我相信您点击更新正确后会收到错误消息?

    你应该遵循here描述的方法

    据我了解,您希望限制用户更改“UpdatedBy”字段的值,因为这会破坏该字段的用途。

    在您的 ASPX 代码中,您必须设置您的 GridView1 OnRowUpdating = GridView1_RowUpdating,这是它的代码隐藏:

    protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        GridViewRow row = GridView1.Rows[GridView1.EditIndex];
    
        // Put a debug point here to check if value of originalUpdatedBy = UpdatedBy of Edit row
        string originalUpdatedBy= row.Cells[7].Text;         
    
        if(!string.IsNullOrEmpty(originalUpdatedBy))
        {
            SqlDataSource1.UpdateParameters.Add("@UpdateBy", originalUpdatedBy);
            SqlDataSource1.Update();
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-03-27
      • 1970-01-01
      • 2023-03-29
      • 2012-09-13
      • 2018-06-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多