ASP.NET列表框选中项目更改文本框文本

时间:2015-04-03 10:12:53

标签: c# jquery asp.net listbox

所以我有一个列表框,里面有5个不同的人。当我点击列表中的第一个人时,文本会出现在文本框中。如果我点击另一个人,我们会在文本框中输入另一个文本等。

这是我的清单:

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,我们会在文本框中看到文本“Andersson”。如果我们点击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适合我。提前谢谢。

3 个答案:

答案 0 :(得分: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...
   }
}

<强> 更新

刚看到@Banana和@PhilipB的评论。如上所述,您需要确保在Page_Load事件中将if(!IsPostback)中的列表框初始化包装起来,以确保不会丢失您选择项目的事实。

答案 1 :(得分: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;
        }
  }

答案 2 :(得分: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>