asp.net中的多列组合框

时间:2014-09-30 09:26:38

标签: c# asp.net

我有一个包含两个字段的数据库表MainAccount和MainDescription表具有以下数据MainAccount 10 MainDescription Capital,MainAccount 20 MainDescription帐户可用,MainAccount 30 MainDescription应付帐款

我有一个带有DropDownList的asp.net页面和一个文本框。我想在这里获取DropDownList中的所有数据是我的代码

  protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
         using (SqlDataAdapter adapter = new SqlDataAdapter("select distinct MainAccount,MainDescription from chart", db.con))
        {
            DataTable datatable = new DataTable();
            adapter.Fill(datatable);

            List<ListItem> list = new List<ListItem>();

            foreach (DataRow dr in datatable.Rows)
            {
                string descr = string.Format("{0} | {1}", dr[0].ToString(), dr[1].ToString());
                list.Add(new ListItem(descr));
            }

            list = list.OrderBy(a => a.Text).ToList();
            DropDownList1.DataSource = list;

            DropDownList1.DataBind();

        }
    }
    }

此代码可以正常显示DropDownList中的所有MainAccount和Main Description。

这就是我现在所拥有的:

enter image description here

这就是我要找的结果:

enter image description here

3 个答案:

答案 0 :(得分:0)

要获得第二张图片的结果,我已经尝试过这个例子,请看下面的两张图片。

添加属性类

public class Columns
{
    // obviously you find meaningful names of the 2 properties

    public string MainAccount { get; set; } 
    public string MainDescription { get; set; }
    public string Concatenate  {get ; set ;}
}

然后

if (!IsPostBack)
        {
         using (SqlDataAdapter adapter = new SqlDataAdapter("select distinct MainAccount,MainDescription from chart", db.con))
        {
            DataTable datatable = new DataTable();
            adapter.Fill(datatable);

            List<Columns> list = new List<Columns>();

            foreach (DataRow dr in datatable.Rows)
            {
                list.Add(new Columns { MainAccount =dr[0].ToString() ,
                                      MAinDescription =  dr[1].ToString(),
                                      Concatenate = string.Format("{0} | {1}",dr[0].ToString(), dr[1].ToString())});
            }

            list = list.OrderBy(a => a.MainAccount).ToList();
            DropDownList1.DataSource = list;
            DropDownList1.DataValueField = "MainDescription";
            DropDownList1.DataTextField = "Concatenate";
            DropDownList1.DataBind();

        }
    }

然后使用下拉列表的on SelectedIndexChanged属性并设置文本框值。 示例我只是在下面运行。

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

namespace DropDown
{
    public partial class WebForm1 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                List<Columns> list = new List<Columns>();
                for (int i = 0; i < 10; i++)
                {
                    list.Add(new Columns
                    {
                        MainAccount = "1" + i,
                        MainDescription = "Main Account Desc" + i,
                        Concatenate = string.Format("{0} | {1}", "1" + i, "Main Account Desc" + i)
                    });
                }

                DropDownList1.DataSource = list;
                DropDownList1.DataValueField = "MainDescription";
                DropDownList1.DataTextField = "Concatenate";
                DropDownList1.DataBind();
            }
        }

        protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
        {
            TextBox1.Text = DropDownList1.SelectedValue.ToString();
        }

    }
}

以下是生成的图像。

第二张图片

此外,我注意到您在选择后将组合框文本更改为mainAccount。只是为了让你知道你不能将组合框文本重置为列表中不存在的项目。但是我建议你使用公共数组或结构,填充你的数组onload,然后再从数组中填充你的列表。选择后,您可以从阵列/列表中刷新下拉列表,并将datatextfield重置为mainAccount列。然后将所选内容设置为MainDescription列=文本框文本的行。我希望这有帮助。如果您需要更多帮助,请告诉我们?

答案 1 :(得分:0)

您可以将MainAccount(即10,20,30,40)绑定到下拉列表。 在选定的索引更改中,您可以显示MainDescription。  像这样 -

DataRow [] drDesc = dt.Select(filter expression)

答案 2 :(得分:0)

我认为最好的解决方案可能是创建一个包含两个变量定义的类,并通过此类的列表设置DropDownlist的数据源

public class DropDownDataSource
{
    public string Text { set; get; }
    public string Value { set; get; }
}

然后我们将修改您的代码以使用新的方式

    List<DropDownDataSource> list = new List<DropDownDataSource>();
    foreach (DataRow dr in datatable.Rows)
    {
        var item = new DropDownDataSource
        {
           Text = dr[0].ToString() + " | " + dr[1].ToString(),
           Value = dr[1].ToString()
        };

        list.Add(item);
    }
    DropDownList1.DataSource = list;
    DropDownList1.DataTextField = "Text";
    DropDownList1.DataValueField = "Value";
    DropDownList1.DataBind();

并且在DropDownList1的SelectedIndexchanged事件中,我们将编写此代码以带来所选项的值并将其绑定在文本框中

    protected void DropDownList1_OnSelectedIndexChanged(object sender, EventArgs e)
    {
        TextBoxValue.Text = DropDownList1.SelectedValue;
    }