У меня есть 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"
/>
Могу я получить некоторую помощь относительно того, что я упускаю / не понимаю, пожалуйста?
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();
}
}
Похожие вопросы
Связанные вопросы
Новые вопросы
asp.net
ASP.NET - это среда разработки веб-приложений Microsoft, которая позволяет программистам создавать динамические веб-сайты, веб-приложения и веб-службы. Полезно использовать этот тег в сочетании с тегом типа проекта, например, [asp.net-mvc], [asp.net-webforms] или [asp.net-web-api]. НЕ используйте этот тег для вопросов о ASP.NET Core - используйте вместо этого [asp.net-core].