如何在asp.net的不同列表框中显示所选项的datavaluefield

时间:2018-01-04 07:07:55

标签: c# listbox

我有3个列表框。列表框按code-datatextfielddatavaluefield提取两个值。第一个列表框将datatextfield项目从第一个列表框传输到第二个列表框。我想将所选第一个列表框项目的datavaluefield传输到第三个列表框。

if (ListBox3.SelectedIndex >= 0
{
   for (int i = 0; i < ListBox3.Items.Count; i++)
    {
       if (ListBox3.Items[i].Selected)
       {
            if (!arraylist1.Contains(ListBox3.Items[i]))
            {
                arraylist1.Add(ListBox3.Items[i]);
                Session["value"] = ListBox3.Items[i];
            }
        }
    }
    for (int i = 0; i < arraylist1.Count; i++)
    {
        if (!ListBox2.Items.Contains(((ListItem)arraylist1[i])))
        {
            ListBox2.Items.Add(((ListItem)arraylist1[i]));

        }
        ListBox3.Items.Remove(((ListItem)arraylist1[i]));
    }
    ListBox2.SelectedIndex = -1;

}
else
{

}



SqlConnection con = new SqlConnection(strcon);
SqlCommand command = new SqlCommand("select * from IT_1_BOILER_DESK_1_PARAMETERS where paramtext='" + Session["value"] + "'", con);
SqlDataAdapter dataAadpter = new SqlDataAdapter(command);
DataSet ds = new DataSet();
dataAadpter.Fill(ds);
if (ds != null)
{
    ListBox1.DataSource = ds.Tables[0];
    ListBox1.DataTextField = "param";
    //ListBox3.DataValueField = "param";
    ListBox1.DataBind();
}

列表框3

       protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
{
    SqlConnection con = new SqlConnection(strcon);
    SqlCommand command = new SqlCommand("select * from IT_1_BOILER_DESK_1_PARAMETERS where pname='" + this.DropDownList1.SelectedValue + "'" ,con);
    SqlDataAdapter dataAadpter = new SqlDataAdapter(command);
    DataSet ds = new DataSet();
    dataAadpter.Fill(ds);
    if (ds != null)
    {
        ListBox3.DataSource = ds.Tables[0];
        ListBox3.DataTextField = "paramtext";
        ListBox3.DataValueField = "param";
        ListBox3.DataBind();


    }
}

但是我想显示从listbox3到listbox1中选择的项目的datavaluefield

1 个答案:

答案 0 :(得分:0)

由于您希望将DataTextField值和DataValueField值从一个列表框显示为2个不同的列表框。我建议你使用不同的方法。这也将减少第二次数据库调用的使用。

请尝试以下操作: -

if (ListBox3.SelectedIndex >= 0)
{
   for (int i = 0; i < ListBox3.Items.Count; i++)
    {
       if (ListBox3.Items[i].Selected)
       {
            if (!arraylist1.Contains(ListBox3.Items[i]))
            {
                arraylist1.Add(ListBox3.Items[i]);
                //Session["value"] = ListBox3.Items[i]; no need of this
            }
        }
    }
    for (int i = 0; i < arraylist1.Count; i++)
    {
        if (ListBox2.Items.FindByText(((ListItem)arraylist1[i]).Text)==null)
        {
//since you already have text and value field values in arrayList. Use them
            ListBox2.Items.Add(new ListItem(((ListItem)arraylist1[i]).Text));

        }
        if (ListBox1.Items.FindByText(((ListItem)arraylist1[i]).Text)==null) 
{
ListBox1.Items.Add(new ListItem((ListItem)arraylist1[i]).Value));
}

ListBox3.Items.Remove(((ListItem)arraylist1[i]));
    }
    ListBox2.SelectedIndex = -1;

}
else
{

}

/* This database call can be removed

SqlConnection con = new SqlConnection(strcon);
SqlCommand command = new SqlCommand("select * from IT_1_BOILER_DESK_1_PARAMETERS where paramtext='" + Session["value"] + "'", con);
SqlDataAdapter dataAadpter = new SqlDataAdapter(command);
DataSet ds = new DataSet();
dataAadpter.Fill(ds);
if (ds != null)
{
    ListBox1.DataSource = ds.Tables[0];
    ListBox1.DataTextField = "param";
    //ListBox3.DataValueField = "param";
    ListBox1.DataBind();
}*/