У меня есть 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" 
        />

Могу я получить некоторую помощь относительно того, что я упускаю / не понимаю, пожалуйста?

0
user1724708 26 Мар 2014 в 22:03

1 ответ

Лучший ответ

Я полагаю, вы получаете ошибку, когда нажимаете Обновить правильно?

Вы должны следовать подходу, описанному здесь

Насколько я понимаю, вы хотите запретить пользователю изменять значение поля «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
Community 23 Май 2017 в 15:11