У меня есть GridView, DataSourceID которого является ObjectDataSource. У меня есть UpdateMethod в этом ObjectDataSource. Я хочу обновить запись только в том случае, если запись не дублируется, но моя проблема заключается в том, что она по-прежнему создает дубликаты записей вместо моего кода, который проверяет, не вставлять ли запись, но метод обновления по-прежнему обновляет запись.
Я пыталсяудалив UpdateMethod и написал свой собственный код в RowCommand, но потом он выдает ошибку «Обновление не поддерживается ObjectDataSource», поэтому мне кажется, что я должен сохранить updatemethod
<asp:GridView ID="gridView2" Width="100%" ShowFooter="True" runat="server" DataKeyNames="DataFieldId"
AutoGenerateColumns="False" ShowHeaderWhenEmpty="True"
DataSourceID="ObjectDataSource2" AllowPaging="True" OnDataBound="gridViewHeader_DataBound"
OnRowCommand="gridViewHeader_RowCommand" OnRowUpdating="gridViewHeader_RowUpdating">
<asp:ObjectDataSource ID="ObjectDataSource5" runat="server" SelectMethod="GetDataFields"
TypeName="CustomDataPropertyDataSource" DataObjectTypeName="DataObjects.CustomDataField"
OnSelecting="ObjectDataSource2_Selecting" InsertMethod="InsertDataField" DeleteMethod="DeleteDataField" UpdateMethod="UpdateDataField">
<SelectParameters>
<asp:Parameter Name="DataId" Type="Int32" />
</SelectParameters>
</asp:ObjectDataSource>
файл класса
public int UpdateDataField(CustomDataField dataField)
{
if (DataContext.DataFields.Count(m => m.Name == dataField.FieldName && m.DataId == dataField.DataId) == 0)
{
DataField df = DataContext.DataFields.Single(m => m.DataFieldId == dataField.DataFieldId);
df.Name = dataField.FieldName;
df.Description = dataField.Description;
MRDataContext.dc.SubmitChanges();
return 1;
}
else
{
return -1;
}
}
c # gridViewHeader_RowCommand
if (e.CommandName == "Update")
{
int retVal = ds.UpdateDataField(dataField);
if (retVal == -1)
{
ScriptManager.RegisterClientScriptBlock((sender as Control).Page, this.GetType(), "alert2", "generateWithTimeout('A field with this name already exists!')", true);
}
else
{
gridViewHeader.DataBind();
}
}
Как отобразить предупреждение и не позволяет UpdateMethod вставлять дублирующую строку. Оно отображает сообщение, но обновляет строку с дублирующимися значениями.