0

ASP.NET 新手。

我创建了一个 sqldatasource 并使用向导设置了基本的选择查询(SELECT * FROM Accounts)。然后我让 sqldatasource 向导创建 INSERT、EDIT 和 DELETE 查询。将此数据源连接到启用编辑和删除的网格视图。一切正常。SELECT 查询返回所有记录,我可以编辑/删除它们。

现在我需要向 SELECT 命令发送一个参数,以将记录过滤到具有用户 ID(从 Membership.GetUser 中提取)的记录。当我添加此参数时,SELECT 命令可以正常工作,但 gridview 中的 EDIT/DELETE 按钮不再起作用。

不会产生错误。页面刷新,但数据库中的记录未更新。我不明白出了什么问题。

代码:

<%
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>
4

3 回答 3

0

您是否确认记录仍在数据库中?而且这不仅仅是Grid在Edit、Update或Delete之后没有做DataBind吗?这让我不止一次!

另请查看您的代码: SqlDataSource1.SelectParameters("UserId").DefaultValue = userid

您正在设置 SelectParameters... 但您也需要设置更新、删除等参数。

于 2013-10-29T21:44:03.613 回答
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
于 2013-10-31T01:06:39.123 回答
0

你为什么选择那个方法.getuser?SQL 命令行中的一个简单的 join using 语句就可以完成这项工作。您不需要向导。

于 2013-10-29T21:51:04.323 回答