2014-03-26 39 views
0

我有一个GridView,其功能离一个SqlDataSource的发生时,它允许插入和更新数据。但是,插入数据后,用户不应编辑“UpdatedBY”。所以我增加了一个只读属性到绑定列,并将其设置为true,一旦在试图编辑/更新列以下错误:必须声明标量变量“@UpdateBY”。注意:只有当我在“UpdateBY”列上实现只读属性时才会出现错误。当删除,更新没有错误当电网,但我不希望用户能够修改UpdateBY列错误,只有只读绑定列被设置为true

超:

<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 [email protected], 
    [email protected],[email protected], [email protected] 
    WHERE [email protected]_ID" 
    InsertCommand="INSERT ShipMode (ShipMode,Active,UpdateDate,UpdateBY) 
      VALUES (@ShipMode,@Active,@UpdateDate,@UpdateBY)"  
    runat="server" 
     /> 

我能得到一些帮助,以我缺少/不理解,请什么呢?

回答

0

我belieave你所得到的错误,一旦你打更新正确的吗?

你应该采取的办法描述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(); 
    } 
} 
+0

做工精细,感谢您的帮助 – user1724708