Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 更新Gridview时呈现错误,仅当boundfield readonly设置为true时发生_Asp.net_Vb.net_Gridview - Fatal编程技术网

Asp.net 更新Gridview时呈现错误,仅当boundfield readonly设置为true时发生

Asp.net 更新Gridview时呈现错误,仅当boundfield readonly设置为true时发生,asp.net,vb.net,gridview,Asp.net,Vb.net,Gridview,我有一个GridView,它在sqlDataSource上运行,它允许插入和更新数据。但是,插入数据后,用户不应编辑“UpdatedBY”。因此,我向绑定列添加了一个readonly属性并将其设置为true,这会在尝试编辑/更新列时生成以下错误:必须声明标量变量“@UpdateBY”。注意:只有在“UpdateBY”列上实现只读属性时,才会发生此错误。删除后,更新网格时不会出错,但我不希望用户能够修改UpdateBY列 超文本: <asp:GridView ID="GridView1"

我有一个GridView,它在sqlDataSource上运行,它允许插入和更新数据。但是,插入数据后,用户不应编辑“UpdatedBY”。因此,我向绑定列添加了一个readonly属性并将其设置为true,这会在尝试编辑/更新列时生成以下错误:必须声明标量变量“@UpdateBY”。注意:只有在“UpdateBY”列上实现只读属性时,才会发生此错误。删除后,更新网格时不会出错,但我不希望用户能够修改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" 
        />


我能得到一些关于我遗漏/不理解的帮助吗

我相信一旦点击“更新正确”按钮,您就会收到错误信息

您应该遵循所描述的方法

据我所知,您希望限制用户更改“UpdatedBy”字段的值,因为这将破坏此字段的用途

在ASPX代码中,必须设置GridView1
onRowUpdate=GridView1\u RowUpdate
,以下是相关代码:

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();
    }
}