0

管理者がドロップダウンリストからユーザーを選択し、そのユーザーに関連付けられたロールをチェックボックスに表示してもらいたいと考えています。

以下のコードを実行しようとすると、

varchar 値 'John Mayer' をデータ型 int に変換するときに変換に失敗しました

これを解決する方法はありますか?

以下は私が使用しているコードです。

'//Markup
<p>
     <b>Select a User:</b> 
     <asp:DropDownList ID="UserList" runat="server" AutoPostBack="True" 
          DataTextField="UserName" DataValueField="LoginId" OnSelectedIndexChanged="UserList_SelectedIndexChanged"> 

     </asp:DropDownList> 
</p> 
<p> 
    <div class="roleList">
        <asp:CheckBoxList ID="RoleList" runat="server">
        </asp:CheckBoxList>
    </div>

'//CodeBehind
Public Sub PopulateUserList()
        Dim cmd As New SqlCommand("Select LoginId,UserName from tblLogin", New SqlConnection(ConfigurationManager.ConnectionStrings("DBConnectionString").ConnectionString))
        cmd.Connection.Open()

        Dim ddlValues As SqlDataReader
        ddlValues = cmd.ExecuteReader()

        UserList.DataSource = ddlValues
        UserList.DataValueField = "LoginId"
        UserList.DataTextField = "UserName"
        UserList.DataBind()

        cmd.Connection.Close()
        cmd.Connection.Dispose()
    End Sub

    Protected Sub UserList_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)

        Dim conn As String = ConfigurationManager.ConnectionStrings("DBConnectionString").ConnectionString

        Dim ds As DataSet = New DataSet()

        Dim sql As String = "select UserRoles from tblLogin where userName = " + UserList.SelectedValue

        Dim AD As New SqlDataAdapter(sql, conn)
        AD.Fill(ds, "table")

        RoleList.DataSource = ds.Tables(0)
        RoleList.DataTextField = "UserRoles"
        RoleList.DataValueField = "LoginId"
        RoleList.DataBind()

    End Sub

ありがとうございました

4

1 に答える 1

2

おそらく、UserRoles だけでなく、テーブルから LoginID も取得する必要があります。

Protected Sub UserList_SelectedIndexChanged(ByVal sender As Object, ByVal e As EventArgs)

    Dim conn As String = ConfigurationManager.ConnectionStrings("DBConnectionString").ConnectionString

    Dim ds As DataSet = New DataSet()

    Dim sql As String = "select LoginId, UserRoles from tblLogin " + 
                        "where userName = @uname"

    Dim AD As New SqlDataAdapter(sql, conn)
    AD.SelectCommand.Parameters.AddWithValue("@uname",  UserList.SelectedItem.Text)
    AD.Fill(ds, "table")

    RoleList.DataSource = ds.Tables(0)
    RoleList.DataTextField = "UserRoles"
    RoleList.DataValueField = "LoginId"
    RoleList.DataBind()
于 2013-06-29T15:59:33.963 に答える