Обновление базы данных, но GridView остается неизменным - PullRequest
0 голосов
/ 12 октября 2011

У меня есть код для удаления строк из базы данных, когда пользователь нажимает кнопку «Удалить» в моем GridView, но GridView не обновляется, чтобы отразить новые изменения данных.

Вот мойкод:

    <asp:GridView runat="server" ID="grdQuestions" AutoGenerateColumns="false" Width="100%" CellSpacing="10"
         PagerSettings-Visible="true">
        <HeaderStyle CssClass="aspNetHeader" />
        <Columns>
            <asp:BoundField DataField="QuestionID" HeaderText="QID" />
            <asp:BoundField DataField="ModuleID" HeaderText="Mod #" />
            <asp:BoundField DataField="QuestionText" HeaderText="Question" />
            <asp:BoundField DataField="CorrectAnswer" HeaderText="Answer" />
            <asp:BoundField DataField="AnswerNote" HeaderText="Note" />
            <asp:TemplateField>
                <ItemTemplate>
                    <asp:HyperLink runat="server" ID="lnkEdit" Text="Edit"></asp:HyperLink>
                </ItemTemplate>
            </asp:TemplateField>
            <asp:TemplateField>
                <ItemTemplate>
                    <asp:LinkButton runat="server" ID="lnkDelete" Text="Delete" CommandArgument='<%# eval("QuestionID") %>'></asp:LinkButton>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>

Protected Sub grdQuestions_RowCommand(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewCommandEventArgs) Handles grdQuestions.RowCommand
    If e.CommandName = "Delete" Then

        sql = "delete from tmp_Questions where QuestionID = " & e.CommandArgument
        Dim cmd As New SqlCommand(sql, d.SQLConnection)

        d.SQLConnection.Open()
        cmd.ExecuteNonQuery()
        d.SQLConnection.Close()

        GetModuleData()
    End If
End Sub

Protected Sub grdQuestions_RowDeleting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.GridViewDeleteEventArgs) Handles grdQuestions.RowDeleting
    GetModuleData()
End Sub

Private Sub GetModuleData()
    ' ddlModules is a drop down where the user can select a module to filter questions by.
    Dim selid As Integer = ddlModules.SelectedItem.Value
    sql = "select QuestionID, ModuleID, LEFT(QuestionText, charindex(' ', QuestionText, 30)) as QuestionText, CorrectAnswer," & vbCrLf & _
        "AnswerNote from tmp_Questions" & vbCrLf & _
        "where ModuleID = " & selid & vbCrLf & _
        "order by ModuleID"
    Dim cmd As New SqlCommand(sql, d.SQLConnection)
    cmd.CommandText = sql

    QuestionAdapter.SelectCommand = cmd
    QuestionAdapter.Fill(QuestionData)

    If QuestionData.Tables(0).Rows.Count > 0 Then

        grdQuestions.DataSource = QuestionData
        grdQuestions.DataBind()
    End If
End Sub

Заранее благодарим Вас за просмотр!

РЕДАКТИРОВАТЬ 1:
Сделали некоторые шаги по коду и обнаружили, что e.CommandArgumentне получить значение в grdQuestions_RowCommand

РЕДАКТИРОВАТЬ 1 (пересмотрено):
Тот факт, что e.CommandArgument не получил значение, было моей ошибкой.Я изменил способ присвоения значения без удаления предыдущего метода.Код проходит через grdQuestions_RowCommand, затем переходит в grdQuestions_RowDeleting, а затем выполняется GetModuleData.
У меня такое ощущение, что для просмотра изменений в сетке может потребоваться PostBack, но я удалил всю привязку данных кблок If Not IsPostBack Then, потому что альтернатива вызвала проблемы с DropDownList, выбор которого используется в качестве ссылки для заполнения сетки (ddlModules выбрали модуль, чьи вопросы будут отображаться в сетке).

1 Ответ

0 голосов
/ 12 октября 2011

Вы не указали ни CommandName="Edit" для lnkEdit, ни CommandName="Delete" для lnkDelete.

У меня такое ощущение, что для просмотра изменений в сетке может потребоваться PostBack

Конечно, должна произойти обратная передача, и GridView должен быть снова привязан к своему источнику данных после того, как вы удалили запись.Но эта обратная передача уже произошла, когда пользователь щелкнул ссылку удаления, и grdQuestions_RowDeleting был обработан.Отладьте и убедитесь, что запись удалена, а после GridView снова получает данные.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...