0

私のユーザー コントロールには、新しいメンバーシップ ユーザーを作成するために使用したテキスト ボックスがあります。membership.getallusers()各リストボックスには、リストボックスを満たすように設定されたデータソースがあります。リストボックスのインデックスが変更されると、テキスト ボックスに入力されて編集できるようになります。私が達成したいのは、各ユーザーのリストボックスを更新して、作成された新しいユーザーを表示することです。ユーザーの作成に成功した後に呼び出しても、databind()更新されません。フォームの読み込み時に if をチェックしてから、正しく動作する をlistbox.items.count < 1呼び出します。databind()何か案は?

Protected Sub Page_Load(sender As Object, e As EventArgs) Handles Me.Load
    If ListBox3.Items.Count < 1 Then
        For Each item As MembershipUser In Membership.GetAllUsers(0, Membership.GetAllUsers.Count + 1, Membership.GetAllUsers.Count)
            ListBox3.Items.Add(item.UserName)
        Next
        Label1.Text = ListBox3.Items.Count
        username = ListBox3.Items(0).ToString
    Else
        ListBox1.DataBind()
        ListBox3.DataBind()
    End If
    user = Membership.GetUser
    ListBox1.DataSource = Membership.GetAllUsers
    ListBox1.DataBind()
    ListBox2.DataSource = Roles.GetAllRoles
    ListBox2.DataBind()
    ' ListBox3.DataSource = Membership.GetAllUsers
    'ListBox3.DataBind()
End Sub

Protected Sub ListBox3_SelectedIndexChanged(sender As Object, e As EventArgs) Handles             ListBox3.SelectedIndexChanged
    txtUsername.Text = user.UserName
    txtEmail.Text = user.Email
    txtQuestion.Text = user.PasswordQuestion     
End Sub

Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Try'Creates a new user
        Dim status As System.Web.Security.MembershipCreateStatus
        Membership.CreateUser(txtUsername.Text, txtPassword.Text, txtEmail.Text, txtQuestion.Text, txtAnswer.Text, True, status)
        Label1.Text = "User " & txtUsername.Text & " was created"
        'ListBox3.Items.Clear()
        ListBox1.DataBind()
        'ListBox3.DataBind()
    Catch ex As Exception
        Label1.Text = "Error:" & ex.Message
    End Try
End Sub
4

1 に答える 1

1

次のように、データバインドを行う前にデータソースを再度設定する必要があります。

Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Try'Creates a new user
        Dim status As System.Web.Security.MembershipCreateStatus
        Membership.CreateUser(txtUsername.Text, txtPassword.Text, txtEmail.Text, txtQuestion.Text, txtAnswer.Text, True, status)
        Label1.Text = "User " & txtUsername.Text & " was created"
        'ListBox3.Items.Clear()
        ListBox1.DataSource = Membership.GetAllUsers()  ' Necessary because the DB has changed
        ListBox1.DataBind()
        'ListBox3.DataBind()
    Catch ex As Exception
        Label1.Text = "Error:" & ex.Message
    End Try
End Sub

databind を呼び出すと、Listbox がデータソースとして指定したメソッドを呼び出す瞬間だと思うかもしれませんが、そうではありません。データソースを割り当てた瞬間に、データが取得されます。実際に Databind メソッドを呼び出すと、Listbox は必要な内部コントロールを作成します。

于 2013-04-22T21:48:17.097 に答える