2011-05-02 64 views
3

我在列表框中有幾項。當我選擇一個項目時,我將它存儲在一個字符串中供進一步使用,但是當我顯示該字符串值時,它顯示爲空。列表框中的選定項爲空

下面是我的Invitee.aspx文件的代碼:爲Invitee.aspx.cs

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Invitee.aspx.cs" Inherits="FinalProj2.Invitee" %> 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml"> 
<head runat="server"> 
    <title></title> 
</head> 
<body> 
    <form id="form1" runat="server"> 
    <div> 

     <asp:DropDownList ID="DropDownList1" runat="server"> 
     </asp:DropDownList> 
     <asp:DropDownList ID="DropDownList2" runat="server"> 
     </asp:DropDownList> 
     <asp:DropDownList ID="DropDownList3" runat="server"> 
     </asp:DropDownList> 
&nbsp;&nbsp;&nbsp;&nbsp; 
     <asp:DropDownList ID="DropDownList4" runat="server"> 
     </asp:DropDownList> 
     <asp:DropDownList ID="DropDownList5" runat="server"> 
     </asp:DropDownList> 
     <asp:DropDownList ID="DropDownList6" runat="server"> 
     </asp:DropDownList> 

    </div> 
    <asp:ListBox ID="ListBox1" runat="server" AutoPostBack="true" Height="310px" 
     onselectedindexchanged="ListBox1_SelectedIndexChanged" Width="271px"> 
    </asp:ListBox> 
    <asp:TextBox ID="TextBox1" runat="server" Height="217px" Width="544px"></asp:TextBox> 
    </form> 
</body> 
</html> 

和代碼:

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 

namespace FinalProj2 
{ 
    public partial class Invitee : System.Web.UI.Page 
    { 
     FinalProj2.Models.DataClasses1DataContext db = new FinalProj2.Models.DataClasses1DataContext(); 

     protected void Page_Load(object sender, EventArgs e) 
     { 

      for (int i = 1; i < 13; i++) 
      { 
       DropDownList1.Items.Add(new ListItem(i.ToString())); 
       DropDownList4.Items.Add(new ListItem(i.ToString())); 
      } 

      for (int i = 1; i < 32; i++) 
      { 
       DropDownList2.Items.Add(new ListItem(i.ToString())); 
       DropDownList5.Items.Add(new ListItem(i.ToString())); 
      } 

      for (int i = 2010; i < 2021; i++) 
      { 
       DropDownList3.Items.Add(new ListItem(i.ToString())); 
       DropDownList6.Items.Add(new ListItem(i.ToString())); 
      } 


      var query = from emp in db.Employees 
         select emp.Employee_Name; 

      ListBox1.DataSource = query; 
      ListBox1.DataBind(); 
     } 

     protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e) 
     { 
      Response.Write("Hello"); 

      string selected = ListBox1.SelectedValue.ToString(); 

      Response.Write("\n Selected Value is" + selected); 

      var query = from emp in db.Employees 
         where emp.Employee_Name == selected 
         select emp.Employee_ID; 

      Response.Write(query); 

      //int empid = query.First(); 

      //var query1 = from meet_emp in db.Meet_Emps 
      //    where meet_emp.Employee_ID == empid 
      //    select meet_emp.Meeting_ID; 

      //int meetid = query1.First(); 

      //Response.Write(meetid); 
     } 
    } 
} 

串的 「選擇」 值爲null我選擇一個後列表框中的項目。

回答

7

這是因爲您在每個週期運行ListBox1.DataBind()。更改爲:

if (!IsPostBack) 
{ 
    var query = from emp in db.Employees 
       select emp.Employee_Name; 

    ListBox1.DataSource = query; 
    ListBox1.DataBind(); 
} 
+1

正常工作...謝謝:) – 2011-05-02 17:05:23

6

您需要在此條件下添加列表項; !Page.IsPostBack。因爲在調用選定的索引更改事件之前,首先發生Page PostBack事件,您的選擇將消失。

if(!Page.IsPostBack) 
{ 
for (int i = 1; i < 13; i++) 
     { 
      DropDownList1.Items.Add(new ListItem(i.ToString())); 
      DropDownList4.Items.Add(new ListItem(i.ToString())); 
     } 

     for (int i = 1; i < 32; i++) 
     { 
      DropDownList2.Items.Add(new ListItem(i.ToString())); 
      DropDownList5.Items.Add(new ListItem(i.ToString())); 
     } 

     for (int i = 2010; i < 2021; i++) 
     { 
      DropDownList3.Items.Add(new ListItem(i.ToString())); 
      DropDownList6.Items.Add(new ListItem(i.ToString())); 
     } 


     var query = from emp in db.Employees 
        select emp.Employee_Name; 

     ListBox1.DataSource = query; 
     ListBox1.DataBind(); 
} 
3

正如你可以看到ASP.NET Page Life Cycle Overview,在Page_Load將首先執行,並且隨後事件的SelectedIndexChanged。

由於ViewState的原因,您只需要執行一次綁定DropDownList的代碼。其餘的請求將是PostBack。因此,如果(!Page.IsPostBack)需要驗證添加條件

而且您需要定義DataValueField(對象的哪個字段將是Value)和DataTextField(對象的哪個字段對用戶可見)。

0
protected void Page_Load(object sender, EventArgs e) {  
    if(!IsPostBack) 
    listBoxLoad(); 
} 

因爲,你的列表框autopostback=true和您的列表框中單擊BE回傳和listBoxLoad重裝,指數變化。

+0

感謝您花時間提供答案。這是因爲像你這樣有幫助的同伴,我們可以一起學習社區。這裏有一些關於如何讓你的答案很好的技巧:[我如何寫出一個好答案](https://stackoverflow.com/help/how-to-answer)。 – Brien 2018-02-17 03:11:49