2015-04-03 190 views
0

所以我得到了一個列表框,其中有5個不同的人。當我點擊列表中的第一個人時,文本會出現在文本框中。一個如果我點擊另一個人,我們得到在文本框中其他文本等ASP.NET列表框選擇的項目改變文本框文本

這裏是我的清單:

private List<string> personsList = new List<string>(); 

personsList.Add("Person1"); 
personsList.Add("Person2"); 
personsList.Add("Person3"); 
personsList.Add("Person4"); 
personsList.Add("Person5"); 

ListBoxPersons.DataSource = personsList; 
ListBoxPersons.DataBind(); 

所以,如果我點擊PERSON1的,我們在文本框中獲取文本「安德森」 。如果我們點擊Person2,我們會在文本框中顯示文本「Smith」。

我已經試過這樣:

foreach (ListItem item in ListBoxPersons.Items) 
{ 
    if (item.Text == "Person1") 
    { 
     TextBoxPersons.Text = "Andersson"; 
    } 
    else if (item.Text == "Person2") 
    { 
     TextBoxPersons.Text = "Smith"; 
    } 
} 

等,但沒有奏效。我已經嘗試了很多其他的方式來做這件事,但可悲的是沒有運氣。 這看起來很愚蠢,但它只是一個練習。

C#或JQuery適合我。提前致謝。

+0

你'foreach'循環不工作,因爲你正在檢查所有它ems在列表框中,而不僅僅是選定的一個。因此對於執行此檢查的每個人,最終文本將成爲列表中最後一項的文本,因爲這是foreach循環的最後一項將達到 – Banana 2015-04-03 10:27:19

+0

,並且如果您想在單擊列表框時更改文本項目,你需要設置列表框的'AutoPostback =「true」' – Banana 2015-04-03 10:28:11

+0

是的,我有AutoPostback =「true」。檢查我對sr28s答案的評論。 – 2015-04-03 10:37:56

回答

1

您當前的代碼沒有檢查當前選中的內容,只是列表中的每個項目。您需要創建SelectedIndexChanged事件來處理何時選擇不同的事件。像這樣的example on MSDN

基本上,事件添加到您的asp.net ListBox控件,然後用相同的名字像這樣後面在代碼中創建事件:

private void ListBox1_SelectedIndexChanged(object sender, System.EventArgs e) 
{ 
    // Get the currently selected item in the ListBox. 
    string curItem = listBox1.SelectedItem.ToString(); 

    switch(curItem) 
    { 
     case "Person1": 
      TextBoxPersons.Text = "Andersson"; 
     break; 
     case "Person2": 
      TextBoxPersons.Text = "Smith"; 
     break; 
     //Add more cases and perhaps a default... 
    } 
} 

UPDATE

剛看到@Banana和@PhilipB的評論。如前所述,您需要確保在Page_Load事件中將if(!IsPostback)中的列表框初始化包裝起來,以確保您不會失去選擇項目的事實。

+0

那麼至少我已經在那件事上做過了,只是忘了寫下來。我嘗試了你的代碼,但是我在「string curItem = listBox1」這一行上得到了異常「Objectreference不是一個對象的實例」...... – 2015-04-03 10:31:33

+0

@PhilipB這可能是因爲你重新初始化每個頁面加載時的列表框,所以當這個處理程序運行時沒有選擇的項目。用'if(!)包裝你的列表框初始化IsPostBack)',它會工作 – Banana 2015-04-03 10:41:25

+0

謝謝你sr28和香蕉!帶代碼的sr28,以及我得到的例外香蕉。現在它的工作:)也許你香蕉可以用你的IsPostBack評論編輯這個答案,以便將來人們更容易看到它? – 2015-04-03 10:47:11

0

上面的代碼@ sr28建議工作正常我已經嘗試過了。 這是視圖:

<asp:ListBox ID="ListBox1" runat="server" AutoPostBack="true" 
        onselectedindexchanged="ListBox1_SelectedIndexChanged"> </asp:ListBox> 
       <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>` 

on pageload bind the listbox: 
      `if (!IsPostBack) 
      { 
      personsList.Add("Person1"); 
      personsList.Add("Person2"); 
      personsList.Add("Person3"); 
      personsList.Add("Person4"); 
      personsList.Add("Person5"); 
      ListBox1.DataSource = personsList; 
      ListBox1.DataBind(); 
}` 

這對onSelectedIndexChanged:

protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e) 
{ 
     string curItem = ListBox1.SelectedItem.ToString(); 
     switch (curItem) 
     { 
      case "Person1": 
       TextBox1.Text = "Andersson"; 
       break; 
      case "Person2": 
       TextBox1.Text = "Smith"; 
       break; 
     } 
    } 
0

代碼隱藏

protected void Page_Load(object sender, EventArgs e) 
    { 
     if (!IsPostBack) 
     { 
      Dictionary<string, string> personsList = new Dictionary<string, string>(); 

      personsList.Add("Andersson", "Person1"); 
      personsList.Add("Smith", "Person2"); 
      personsList.Add("Name 3", "Person3"); 
      personsList.Add("Name 4", "Person4"); 
      personsList.Add("Name 5", "Person5"); 

      ListBoxPersons.DataTextField = "Value"; 
      ListBoxPersons.DataValueField = "Key"; 
      ListBoxPersons.DataSource = personsList; 
      ListBoxPersons.DataBind(); 
     } 
    } 

    protected void ListBoxPersons_SelectedIndexChanged(object sender, EventArgs e) 
    { 
     TextBox1.Text = ListBoxPersons.SelectedValue; 
    } 

<asp:ListBox ID="ListBoxPersons" runat="server" OnSelectedIndexChanged="ListBoxPersons_SelectedIndexChanged" AutoPostBack="true"></asp:ListBox> 
    <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox> 
相關問題