Обновление не работает на GridView - PullRequest
2 голосов
/ 21 мая 2011

Эй, ребята, У меня есть GridView, который привязан к SqlDataSource, все работает нормально, просто обновление не работает, я вызываю хранимую процедуру, и все параметры и ее dataTypes являются правильными, на самом деле ни одно из событий не работает на этой кнопке обновления, я попытался изменить CommandName для «Изменить» и создал событие OnCommand, и написал ответное сообщение в коде. но на кнопке обновления ничего не происходит, кнопка отмены работает нормально, а также удаление работает, есть только проблема с обновлением, даже если в процедуре есть какое-то событие, по крайней мере, должно возникать событие, я даже проверял в Sql Profiler, но процедура обновления никогда не выполнялась Хиты Sql Server 2008 ...

Но когда я удаляю SqlDataSource, все работает нормально, а также команда обновления с той же хранимой процедурой.

Пожалуйста, помогите мне в этом, я застрял здесь плохо

<asp:GridView ID="GridView1" runat="server" DataSourceID="SqlDataSource1" AutoGenerateColumns="False" 
    CellPadding="4" DataKeyNames="Title" EnableModelValidation="True"
    ForeColor="#333333" GridLines="None"
    ShowFooter="True" Width="950" AllowPaging="true" PageSize="10">
    <AlternatingRowStyle BackColor="White" ForeColor="#284775" />
    <Columns>
        <asp:TemplateField HeaderText="Title">
            <ItemTemplate>
                <%# Eval("Title") %>
            </ItemTemplate>
            <EditItemTemplate>
                <asp:Label ID="txtEditTitle" runat="server" Text='<%# Bind("Title") %>'></asp:Label>
            </EditItemTemplate>
         </asp:TemplateField>
        <asp:TemplateField HeaderText="Quote">
            <ItemTemplate>
                <%# Eval("Quote") %>
            </ItemTemplate>
            <EditItemTemplate>
                <asp:TextBox ID="txtEditQuote" runat="server" Text='<%# Bind("Quote") %>'></asp:TextBox>
            </EditItemTemplate>
        </asp:TemplateField >
        <asp:TemplateField HeaderText="Quote Link">
            <ItemTemplate>
                <%# Eval("QuoteLink") %>
            </ItemTemplate>
            <EditItemTemplate>
                <asp:TextBox ID="txtEditQuoteLink" runat="server" Text='<%# Bind("QuoteLink") %>'></asp:TextBox>
            </EditItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="Published">
            <ItemTemplate>
                <asp:CheckBox ID="chkBox" runat="server" Checked='<%# Convert.ToBoolean(Eval("Published")) %>' Enabled = "false" />  
            </ItemTemplate>
            <EditItemTemplate>
                <asp:CheckBox ID="chkEditBox" runat="server" Checked='<%# Bind("Published") %>' Enabled="true" />
            </EditItemTemplate>
        </asp:TemplateField>
        <asp:TemplateField HeaderText="PublishedDate">
            <ItemTemplate>
                <%# Convert.ToDateTime(DataBinder.Eval(Container.DataItem,"PublishedDate")).ToString("MM.dd.yyyy") %>
            </ItemTemplate>
            <EditItemTemplate>
                <asp:TextBox ID="txtEditPublishedDate" runat="server" Text='<%# Bind("PublishedDate") %>'></asp:TextBox>
            </EditItemTemplate>
        </asp:TemplateField>
       <asp:TemplateField HeaderText="Commands">
            <ItemTemplate>
                <asp:ImageButton runat="server" ID="Edit" ImageUrl="/images/edit.gif" CommandName="Edit" />
                <asp:ImageButton runat="server" ID="Delete" ImageUrl="/images/delete.gif" CommandName="Delete" />
            </ItemTemplate>
            <EditItemTemplate>
                <asp:Button runat="server" ID="btn1" CommandName="Update" Text="Update" />
                <asp:ImageButton runat="server" ID="Cancel" ImageUrl="/images/delete.gif" CommandName="Cancel" />
            </EditItemTemplate>
        </asp:TemplateField>
    </Columns>
    <EditRowStyle BackColor="#999999" />
    <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" />
    <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" HorizontalAlign="Left" ForeColor="White" />
    <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" />
    <RowStyle BackColor="#F7F6F3" ForeColor="#333333" />
    <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" />
</asp:GridView>
  <asp:SqlDataSource ID="SqlDataSource1" runat="server" 
    ConnectionString="<%$ ConnectionStrings:SiteSqlServer %>" 
    DeleteCommand="DELETE FROM [Quotes] WHERE [Title] = @Title"
    SelectCommand= "SELECT [Title], [Quote], [QuoteLink], [Published], [PublishedDate] FROM [Quotes]" 
    UpdateCommand="sp_UpdateQuotes" UpdateCommandType="StoredProcedure"
    InsertCommand="INSERT INTO [Quotes] ([Title], [Quote], [QuoteLink], [Published], [PublishedDate]) VALUES (@Title, @Quote, @QuoteLink, @Published, @PublishedDate)">
    <DeleteParameters>
        <asp:Parameter Name="Title" Type="String" />
    </DeleteParameters>
    <InsertParameters>
        <asp:Parameter Name="Title" Type="String" />
        <asp:Parameter Name="Quote" Type="String" />
        <asp:Parameter Name="QuoteLink" Type="String" />
        <asp:Parameter Name="Published" Type="Boolean" />
        <asp:Parameter Name="PublishedDate" Type="DateTime" />
    </InsertParameters>
    <UpdateParameters>
        <asp:Parameter Name="Quote" Type="String" DefaultValue = "QUotes are simple" />
        <asp:Parameter Name="QuoteLink" Type="String" DefaultValue = "QUotes are Linked" />
        <asp:Parameter Name="Published" Type="Boolean" DefaultValue = "False" />
        <asp:Parameter Name="PublishedDate" Type="DateTime" DefaultValue = "05/15/2011" />
    </UpdateParameters>
</asp:SqlDataSource>

ALTER PROCEDURE [dbo].[sp_UpdateQuotes]<br> @Title varchar(max),<br> @Quote varchar(max),<br> @QuoteLink varchar(max),<br> @Published bit,<br> @PublishedDate DateTime<br> AS<br> BEGIN<br> UPDATE dbo.Quotes SET<br> Quote = @Quote,<br> QuoteLink = @QuoteLink,<br> Published = @Published,<br> PublishedDate = @PublishedDate </p> <pre><code>WHERE Title = @Title If @Published = 1 BEGIN UPDATE dbo.Quotes SET Published = 0 WHERE Title <> @Title AND Published = 1 END

END
Надеюсь, что это даст вам четкое представление о том, что мешает мне для обновления

Ответы [ 2 ]

1 голос
/ 21 мая 2011

Вы не передали @Title parameter, который является вашим основным ключом в вашей хранимой процедуре и используется в where Clause.

Если вы хотите увидеть, что в параметрах обновления нет параметра заголовка:

<UpdateParameters>
    <asp:Parameter Name="Quote" Type="String" />
    <asp:Parameter Name="QuoteLink" Type="String" />
    <asp:Parameter Name="Published" Type="Boolean" />
    <asp:Parameter Name="PublishedDate" Type="DateTime" />
</UpdateParameters>

Если вы добавите параметр заголовка, он будет работать:

    <asp:Parameter Name="Title" Type="String" />
0 голосов
/ 04 сентября 2014

У меня также была проблема с GridView, который не обновлялся.Проверка словаря e.Newvalues ​​в событии RowUpdating GridView показала, что старые значения записи отправляются в запрос UPDATE базы данных.DataKeyNames не была моей проблемой;Я правильно настроил.Предложение WHERE в моем запросе SELECT ссылается на параметр управления для TextBox в моей форме.Я случайно установил EnableViewState для этого текстового поля на «False».Из-за этого GridView перепривязывал себя до того, как произошло ОБНОВЛЕНИЕ.Установка EnableViewState на TextBox на «True» исправила проблему.

    Protected Sub MyGridView_RowUpdating _
    (sender As Object, e As System.Web.UI.WebControls.GridViewUpdateEventArgs) _
    Handles MyGridView.RowUpdating

    ' Inspect the parameters being sent to the database for an ASP NET GridView UPDATE.

    Dim I As Integer

    I = 0

    For Each MVO As System.Collections.DictionaryEntry In e.OldValues
        If MVO.Value Is DBNull.Value OrElse MVO.Value Is Nothing Then
            Debug.Print(I.ToString + ": " + MVO.Key + " Value:  ")
        Else
            Debug.Print(I.ToString + ": " + MVO.Key + " Value:  " + MVO.Value.ToString)
        End If

        I += 1
    Next MVO

    I = 0
    For Each MVN As System.Collections.DictionaryEntry In e.NewValues
        If MVN.Value Is DBNull.Value OrElse MVN.Value Is Nothing Then
            Debug.Print(I.ToString + ": " + MVN.Key + " Value:  ")
        Else
            Debug.Print(I.ToString + ": " + MVN.Key + " Value:  " + MVN.Value.ToString)
        End If
        I += 1
    Next MVN


End Sub
...