大家好,我有一个页面,显示住宿信息,然后在DetailsView中显示创建该信息的人的用户ID。 userID将其转换为用户名,这样我就可以使用该用户名将人员角色更改为承租人。但是我不确定使用C#如何从详细信息视图中获取UserID进行转换并更新角色。有任何想法吗?

Mark

@Tim

这里是我添加的代码:

public partial class adminonly_approval : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    void DetailsView1_ItemCommand(Object sender, DetailsViewCommandEventArgs e){
    if (e.CommandName == "SetToRenter")
    {
        // if UserID is in second row:
        DetailsViewRow row = DetailsView1.Rows[9];

        // Get the Username from the appropriate cell.
        // In this example, the Username is in the second cell  
        String UserID = row.Cells[9].Text;
        MembershipUser memUser = Membership.GetUser(UserID);
        Roles.AddUserToRole(memUser.UserName, "renter");
    }
}


我在详细信息视图下方的页面上添加了一个按钮,并将commandName设置为SetToRenter。当我单击按钮时,虽然它没有更改角色。我是ASP和C#的新手,但需要此功能才能完成大学作业。
有想法吗?

#1 楼

Membership.GetUser(UserId)

MembershipUser memUser = Membership.GetUser(UserId);
Roles.AddUserToRole(memUser.UserName, "Renter");


Roles.AddUserToRole

这是一个如何获取DetailsView的BoundFields值的示例:
http://msdn.microsoft.com/zh-cn/library/system.web.ui.webcontrols.detailsview.itemcommand.aspx

应将Button的CommandName设置为其功能并处理代码背后的DetailsView.ItemCommand事件。在那里,您可以通过以下方式获取用户ID:

void DetailsView1_ItemCommand(Object sender, DetailsViewCommandEventArgs e){
    if (e.CommandName == "SetToRenter")
    {
        // if UserID is in second row:
        DetailsViewRow row = DetailsView1.Rows[1];

        // Get the Username from the appropriate cell.
        // In this example, the Username is in the second cell  
        String UserID = row.Cells[1].Text;
        MembershipUser memUser = Membership.GetUser(UserId);
        Roles.AddUserToRole(memUser.UserName, "Renter");
    }
}


正如Cem所提到的,您应该设置DetailsView的DataKey属性。然后,您还可以通过以下方式获取当前记录的PK:

// Get the ArrayList objects that represent the key fields
ArrayList keys = (ArrayList)(DetailsView1.DataKey.Values).Keys;
// Get the key field for the current record. 
String UserID = keys[0].ToString();


更简单的是DetailsView的快捷方式SelectedValue:

String UserID= DetailsView1.SelectedValue.ToString();


评论


嗨,蒂姆,谢谢您的答复,我看到它是在详细信息视图的UserID字段中获取当前的UsersID而不是一个,我知道该怎么做吗?

–马克
2011年4月4日在21:17

@Mark:不会获取当前用户的UserID。它仅显示了具有UserID时将用户添加到角色的方法。您应该给我们看一些代码,或者告诉我们获得UserID所遇到的问题。

– Tim Schmelter
2011年4月4日在21:20

DataKey也可以工作。我的意思是您不必在DetailsView中找到UserID的单元格。 msdn.microsoft.com/zh-CN/library/…

–cem
2011年4月4日在21:35

@Tim我已将代码添加到我添加的原始帖子中,出现了一些问题。我看到您在cem提到它后添加的其他代码,但是您说得到了PK,但在这种情况下是Accom_ID,而不是UserID

–马克
2011年4月4日在22:18

@Mark:您始终可以使用我的第一种方法,将其复制到问题中。但是您没有提到您遇到的问题。我怀疑它实际上是您的detailsview的第10行中的第10个单元格。我认为这是第十行,但第二个单元格。字符串UserID = row.Cells [1] .Text;

– Tim Schmelter
2011年4月5日在7:13