2012-08-22 259 views
1

下午好,人們一直在試圖使用sql命令填充下拉菜單,直到這麼好,當我點擊下拉菜單時顯示所有項目,但是當我嘗試點擊某個項目時下拉菜單總是返回下拉菜單中的第一項...。​​按照代碼,我想要做的是從下拉菜單中獲取選定的值和項目,並將其保存在標籤上供將來使用。從sql bug填充下拉菜單

我感謝所有支持可能,

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load 
    utilizador.Text = Me.Context.User.Identity.Name 
    If (Not Page.IsPostBack) Then 
     escolhePerfil() 
    End If 

    'DropDownPerfil.DataBind() 
    lbperfil2.Text = DropDownPerfil.SelectedItem.Text 
    lbnome.Text = DropDownPerfil.SelectedValue 
End Sub 


Function escolhePerfil() As Boolean 
    Dim connstring As String = "Data Source=10.2.24.17;Persist Security Info=True;User ID=sa;Password=Pr0dUn1C0$qL;database=ePrimavera" 
    Dim SQLData As New System.Data.SqlClient.SqlConnection(connstring) 

    Dim cmdSelect As New System.Data.SqlClient.SqlCommand("SELECT u.WindowsUser,u.Email ,g.Description, u.Login FROM [ePrimavera].[dbo].[PLT_Users] as u,[ePrimavera].[dbo].[PLT_UserGroups] as ug, [ePrimavera].[dbo].[PLT_Groups] as g where u.ID = ug.UserID And ug.GroupID = g.ID and u.WindowsUser like 'bancounico\" & utilizador.Text & "'", SQLData) 
    SQLData.Open() 

    Dim dtrReader As System.Data.SqlClient.SqlDataReader = cmdSelect.ExecuteReader() 

    If dtrReader.HasRows Then 
     DropDownPerfil.DataValueField = "Login" 
     DropDownPerfil.DataTextField = "Description" 
     DropDownPerfil.DataSource = dtrReader 
     DropDownPerfil.DataBind() 
    End If 
    SQLData.Close() 

    Return True 
End Function 

的.aspx

<asp:DropDownList ID="DropDownPerfil" runat="server" 
     Height="16px" Width="202px" CssClass="DropBorderColor"> 
</asp:DropDownList> 
+1

添加事件DropDownPerfil_SelectedIndexChanged並將事件放在頁面加載中。 lbperfil2.Text = DropDownPerfil.SelectedItem.Text lbnome.Text = DropDownPerfil.SelectedValue – MMK

+0

我已經做到了沒有成功......它不斷返回下拉列表的第一個值...... –

回答

0

試試下面的代碼:

Protected Sub DropDownPerfil_SelectedIndexChanged(sender As Object, e As EventArgs) 
     lbperfil2.Text = DropDownPerfil.SelectedItem.Text 
     lbnome.Text = DropDownPerfil.SelectedValue 
    End Sub 
+0

我沒有成功...... –

+0

我已經嘗試過,第一次沒有成功... –

0

的問題是,你正在試圖獲得的價值「太早了」。該值在Page_Load中無效,因爲控件的OnLoad事件在Page的OnLoad(Page_Load)事件之後觸發。

方法,其他人寫的是正確的,因爲Event Handlig部分(包括控件的onchanged事件)將在加載部分之後進行處理。

有關詳情,請在官方網站ASP.NET life cycle在MSDN

0

可能的原因是,一些(如果不是全部),您要指派給DropDownList中Login的值出現不止一次。

然後,當您在DDL中選擇一個項目時,如果該項目的值出現多次,則選定的索引將突出顯示第一個實例。要測試這個,註釋掉DropDownPerfil.DataValueField = "Login"

我確定在選擇時,它會突出顯示你想要選擇的正確項目。

+0

感謝它的工作:) –