многоколоночное поле со списком в asp.net

1

У меня есть таблица базы данных с двумя полями MainAccount и MainDescription table имеют следующие данные MainAccount 10 MainDescription Capital, MainAccount 20 MainDescription Account Receiable, MainAccount 30 MainDescription Account Payable

У меня есть страница asp.net с DropDownList и текстовое поле. Я хочу получить все данные в 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();

        }
    }
    }

этот код работает отлично, чтобы отображать все MainAccount и Main Description в DropDownList.

Это то, что у меня есть сейчас:

Изображение 174551

И это результат, который я ищу:

Изображение 174551

  • 0
    вот изображение! [введите описание изображения здесь] [1] и результат, который я хочу получить здесь! [введите описание изображения здесь] [2] [1]: i.stack.imgur.com/e8hli.png [2]: i. stack.imgur.com/BNbTO.png
  • 0
    Я отредактировал ваш вопрос, чтобы включить эти изображения.
Показать ещё 1 комментарий
Теги:

3 ответа

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();

        }
    }

Затем используйте свойство 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();
        }

    }
}

Ниже приведено изображение.

Изображение 174551

Второе изображение

Изображение 174551

Также я заметил, что вы изменили текст combobox на mainAccount после выбора. Чтобы сообщить вам, что вы не можете просто сбросить текст combobox к элементу, который не существует в списке. Однако я предлагаю вам использовать открытый массив или структуру, заполнить ваш массив onload, а затем заполнить список из массива. После выбора вы также можете обновить выпадающий список из массива/списка и сбросить поле данных в свой столбец mainAccount. Затем установите выделенную строку в столбец MainDescription = Textbox. Надеюсь, это поможет. Сообщите нам, если вам нужна дополнительная помощь в достижении этого?

  • 0
    ваш код не работает поле со списком показывает значения, как этот webform2 (возвращение colum2)
  • 0
    Nuru Сначала мне нужны оба значения в выпадающем списке, как это, проверьте это изображение i.stack.imgur.com/e8hli.png
Показать ещё 4 комментария
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();

и в событии SelectedIndexchanged DropDownList1 мы напишем этот код, чтобы вывести значение выбранного элемента и bint его в текстовое поле

    protected void DropDownList1_OnSelectedIndexChanged(object sender, EventArgs e)
    {
        TextBoxValue.Text = DropDownList1.SelectedValue;
    }
  • 0
    ваш код показывает следующую ошибку DataBinding: 'PointOfSales.WebForm2 + DropDownDataSource' не содержит свойства с именем 'Text'.
  • 0
    Ахмед Во-первых, мне нужны оба значения столбца в выпадающем списке, как это, пожалуйста, смотрите изображение i.stack.imgur.com/e8hli.png после выбора любого значения, затем мне нужно это i.stack.imgur.com/BNbTO.png
Показать ещё 2 комментария
0

Вы можете связать MainAccount (т.е. 10,20,30,40) с выпадающим списком. И при выбранном изменении индекса вы можете отобразить MainDescription. как this-

DataRow [] drDesc = dt.Select (выражение фильтра)

  • 0
    мне нужно и mainaccount и maindescripton в раскрывающемся списке для значения полного списка
  • 0
    prajkata Сначала мне нужно оба значения столбца в выпадающем списке, как это, пожалуйста, посмотрите изображение i.stack.imgur.com/e8hli.png после выбора любого значения, затем мне нужно это i.stack.imgur.com/BNbTO.png
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню