Gridview UpdateMethod возвращает целочисленное значение - как / где получить возвращаемое значение - PullRequest
0 голосов
/ 30 октября 2019

У меня есть 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 вставлять дублирующую строку. Оно отображает сообщение, но обновляет строку с дублирующимися значениями.

...