2009-05-26 43 views
6

Tôi có một DropDownList đơn giản (ffg) ...giá trị được chọn không thay đổi trong asp: DropDownList

<asp:DropDownList ID="DropDownList2" runat="server" AutoPostBack="true" BackColor="LightSteelBlue" Font-Size="X-Small" 
    OnSelectedIndexChanged="DropDownList2_SelectedIndexChanged1" Style="z-index: 102; left: 37px; position: absolute; top: 85px" Width="331px" 
    </asp:DropDownList> 

mà tôi ràng buộc dữ liệu để usind sự kiện onpageload ...

DropDownList2.DataSource = td.DataSet 
DropDownList2.DataSource = td 
DropDownList2.DataTextField = td.Columns("Name").ColumnName.ToString 
DropDownList2.DataValueField = td.Columns("VendorCode").ColumnName.ToString 
DropDownList2.DataBind() 

và một sự kiện onleselectedindexchaged nơi tôi cố gắng truy xuất giá trị mới như thế này ...

Protected Sub DropDownList2_TextChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles DropDownList2.TextChanged 
     Dim url As String = "sp_menu.aspx?sp=" & DropDownList2.SelectedValue 
     Session.Remove("sp") 
     Session("sp") = DropDownList2.SelectedValue 
     Session("spnm") = DropDownList2.SelectedItem.Text & " (" & DropDownList2.Text & ")" 
     Response.Redirect(url) 
    End Sub 

Nhưng nó luôn luôn mang lại valu đầu tiên e cho dù ai được nhấp vào danh sách thả xuống. Xin vui lòng giúp đỡ!

+0

Vui lòng định dạng mã của bạn! –

+0

Nếu ví dụ đó đúng, bạn đã chỉ định trình xử lý sự kiện là DropDownList2_SelectedIndexChanged1 nhưng mã của bạn nằm trong DropDownList2_TextChanged. Trình xử lý sai được gọi hoặc chỉ là lỗi đánh máy trong bài đăng? – Trotts

+0

Các textchaged là một thay thế tôi đã cố gắng, mã của tôi là trong DropDownList2_SelectedIndexChanged1 –

Trả lời

3

bạn có thể thử sử dụng

DropDownList2.SelectedItem.Value 

thay vì

DropDownList2.SelectedItem.Text 
10

Ok ... một vài điều ...

Đầu tiên DropDownList2_TextChanged không dây để DropDownList của bạn để Tôi không thể thấy sự kiện đó sẽ xảy ra như thế nào trừ khi bạn đang thực hiện dây điện trong mã số của mình

Second

Bạn nói mã này đây

DropDownList2.DataSource = td.DataSet 
DropDownList2.DataSource = td 
DropDownList2.DataTextField = td.Columns("Name").ColumnName.ToString 
DropDownList2.DataValueField = td.Columns("VendorCode").ColumnName.ToString 
DropDownList2.DataBind() 

là trong sự kiện PageLoad của bạn. Bạn đã bao bọc nó trong một số If Not IsPostBack, bởi vì nếu không, bạn sẽ rebind mỗi lần, và mất lựa chọn trước đó của bạn.

+0

Tôi đã không bọc nó trong If Not IsPostBack vì tôi chuyển hướng người dùng đến một trang khác nhau khi họ chọn một mục ... Tôi sẽ cố gắng để bọc nó và sau đó lấy lại cho bạn. –

+0

Xin chào. Cảm ơn bạn rất nhiều vì đã giúp đỡ của bạn. Có vẻ như tôi cần bọc nó trong If Not IsPostBack. Bây giờ nó hoạt động hoàn hảo. Tôi không biết rằng bài đăng lại xảy ra ngay cả khi một sự kiện đã xảy ra (trong đó người dùng được chuyển hướng đến một trang khác.) Cool ... –

+0

Không có vấn đề gì. Về mặt logic, những gì đang xảy ra là, chỉ mục đã chọn thay đổi, sẽ kích hoạt một số javascript với __doPostBack vào cùng một trang. Sự kiện page_load kích hoạt, sau đó là sự kiện xảy ra sự kiện SelectedIndexChanged, và THEN bạn chuyển hướng đến trang tiếp theo. –

5

Khi bạn đang databinding trong Page_Load, bạn về cơ bản cũng đặt lại selecteditem.

Bạn nên bọc bất kỳ mã ràng buộc nào tồn tại trong Page_Load bên trong một khối nếu (! IsPostBack).

EDIT: ... hoặc Nếu không IsPostBack Sau đó ... Kết thúc nếu trong VB.NET

Các vấn đề liên quan