我已經有了我的代碼,當用戶單擊我的GridView中的刪除按鈕時,將數據刪除到數據庫外,但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
EDIT 1(修訂版)得到一個值:
是e.CommandArgument
沒有得到事實價值是我的錯誤。我改變了它的價值被分配的方式,而不刪除以前的方法。 代碼運行通過grdQuestions_RowCommand
,然後進入grdQuestions_RowDeleting
,然後執行GetModuleData
。
我有一種感覺,要查看對網格的更改,可能需要PostBack,但我已將所有DataBinding移除到If Not IsPostBack Then
塊,因爲替代方式導致DropDownList的問題,其選擇被用作填充網格的引用(ddlModules選擇了其問題將顯示在網格中的模塊)。
「GridView未更新以反映新數據更改」是什麼意思?你有一個異常,你有調試,以確保'grdQuestions.DataBind()'被調用嗎?您的DataTable/DataSet在被DataAdapter('ClearBeforeFill')填充之前是否被清除? –
@Tim請參閱新的編輯,對缺乏信息的道歉。 – Ortund