2013-10-29 48 views
0

ASP.NET新增功能。使用選擇參數時Gridview刪除/編輯不起作用

我創建了一個sqldatasource並使用嚮導設置了基本的select查詢(SELECT * FROM Accounts)。然後我有sqldatasource嚮導創建INSERT,EDIT和DELETE查詢。將此數據源連接到啓用了EDITING和DELETING的gridview。一切正常。 SELECT查詢返回所有記錄,我可以編輯/刪除它們。

現在我需要發送一個參數給SELECT命令來過濾記錄到那些用戶的id(從Membership.GetUser拉)。當我添加這個參數時,SELECT命令工作正常,但是gridview中的EDIT/DELETE按鈕不再起作用。

沒有錯誤產生。頁面刷新但記錄未在數據庫中更新。我不明白什麼是錯的。

CODE:

<% 
Dim u As MembershipUser 
Dim userid As String 
u = Membership.GetUser(User.Identity.Name) 
userid = u.ProviderUserKey.ToString 

SqlDataSource1.SelectParameters("UserId").DefaultValue = userid 

%> 

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="ID" DataSourceID="SqlDataSource1"> 
<Columns> 
<asp:CommandField ShowDeleteButton="True" ShowEditButton="True" /> 
<asp:BoundField DataField="ID" HeaderText="ID" InsertVisible="False" 
ReadOnly="True" SortExpression="ID" /> 
<asp:BoundField DataField="UserId" HeaderText="UserId" 
SortExpression="UserId" /> 
<asp:BoundField DataField="AccountName" HeaderText="AccountName" 
SortExpression="AccountName" /> 
<asp:BoundField DataField="DateAdded" HeaderText="DateAdded" 
SortExpression="DateAdded" /> 
<asp:BoundField DataField="LastModified" HeaderText="LastModified" 
SortExpression="LastModified" /> 
</Columns> 
</asp:GridView> 
<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
ConnectionString="<%$ ConnectionStrings:CheckingConnectionString %>" 
DeleteCommand="DELETE FROM [Accounts] WHERE [ID] = @ID" 
InsertCommand="INSERT INTO [Accounts] ([UserId], [AccountName], [DateAdded], [LastModified]) VALUES (@UserId, @AccountName, @DateAdded, @LastModified)" 
SelectCommand="SELECT * FROM [Accounts] WHERE [UserId] = @UserId" 

UpdateCommand="UPDATE [Accounts] SET [UserId] = @UserId, [AccountName] = @AccountName, [DateAdded] = @DateAdded, [LastModified] = @LastModified WHERE [ID] = @ID"> 
<DeleteParameters> 
<asp:Parameter Name="ID" Type="Int32" /> 
</DeleteParameters> 
<InsertParameters> 
<asp:Parameter Name="UserId" Type="String" /> 
<asp:Parameter Name="AccountName" Type="String" /> 
<asp:Parameter Name="DateAdded" Type="DateTime" /> 
<asp:Parameter Name="LastModified" Type="DateTime" /> 
</InsertParameters> 
<UpdateParameters> 
<asp:Parameter Name="UserId" Type="String" /> 
<asp:Parameter Name="AccountName" Type="String" /> 
<asp:Parameter Name="DateAdded" Type="DateTime" /> 
<asp:Parameter Name="LastModified" Type="DateTime" /> 
<asp:Parameter Name="ID" Type="Int32" /> 
</UpdateParameters> 
<SelectParameters> 
<asp:Parameter Name="UserId"/> 
</SelectParameters> 
</asp:SqlDataSource> 

回答

0

你有沒有確認記錄仍然在數據庫中?而且這不僅僅是在編輯,更新或刪除之後,Grid還沒有完成DataBind?這已經讓我不止一次之前!

還看您的代碼: SqlDataSource1.SelectParameters(「用戶ID」)默認值=用戶標識

您設置SelectParameters ...但你需要設置更新,刪除等PARAMS過。

+0

是的,記錄仍然在分貝。是不是更新/刪除設置的參數?這兩個查詢中使用的id是特定記錄的ID。這也是DataKeyNames中的ID –

0

你爲什麼選擇那種方法.getuser?在SQL命令行中使用簡單的連接使用語句可以完成這項工作。你不需要一個嚮導。

+0

不知道我明白... userid是成員資格對象的屬性。直到我拉,我不知道登錄的用戶是誰。除非我知道我無法從帳戶表中檢索相關記錄 –

0

找到了答案。我將拉動成員資格提供者密鑰的代碼移到了datasource_selecting事件中。

Protected Sub SqlDataSource1_Selecting(ByVal sender As Object, ByVal e As System.Web.UI.WebControls.SqlDataSourceSelectingEventArgs) Handles SqlDataSource1.Selecting 
    ' Get a reference to the currently logged on user 
    Dim currentUser As MembershipUser = Membership.GetUser() 

    ' Determine the currently logged on user's UserId value 
    Dim currentUserId As String = currentUser.ProviderUserKey.ToString() 

    ' Assign the currently logged on user's UserId to the @UserId parameter 
    e.Command.Parameters("@UserId").Value = currentUserId 
End Sub