sam_matte Ответов: 0

Различные выпадающие списки с одним и тем же источником дают одно и то же значение. Как справиться?


Я связал три выпадающих списка с одним и тем же адаптером данных oledb. этот oledbdataadapter заполняет три различные таблицы данных, которые я в конечном итоге использую для заполнения трех выпадающих списков. Но когда я получаю доступ к трем раскрывающимся значениям в кнопке отправки, все три раскрывающихся списка дают один и тот же выбранный элемент, даже если я выбрал три разных варианта в раскрывающихся списках. Кто-нибудь может помочь?
вот мой код:-

//select command
cmdExcel.CommandText = "Select * from [" + SheetName + "]";
//oda - oledbdataadapter
oda.SelectCommand = cmdExcel;
oda.Fill(dt_Temp);
DataTable dt_costcode = new DataTable();
oda.Fill(dt_costcode);
DataTable dt_desc = new DataTable();
oda.Fill(dt_desc);
DataTable dt_unit = new DataTable();
oda.Fill(dt_unit);
connExcel.Close();
ViewState["TempImport"] = dt_Temp;

List<CostColumns> list_costCode = Columns(dt_costcode);
Bind_ddlCostCode(list_costCode);

List<CostColumns> list_desc = Columns(dt_desc);
Bind_ddlDescription(list_desc);

List<CostColumns> list_unit = Columns(dt_unit);
Bind_ddlUnitofMeasure(list_unit);

вот код для привязки выпадающих списков:-
<public void Bind_ddlCostCode(List<CostColumns> list_costCode)
        {
            foreach (CostColumns costcol in list_costCode.ToList())
            {
                if (costcol.ColumnType == "System.String")
                {
                    ddlCostCodeNumber.Items.Add(new ListItem(costcol.Columns, costcol.ColumnType));
                }
            }
            ddlCostCodeNumber.DataBind();
            ddlCostCodeNumber.Items.Insert(0, new ListItem("--Select CostCode--", "0"));
        }
        public void Bind_ddlDescription(List<CostColumns> list_desc)
        {

            foreach (CostColumns costcol in list_desc.ToList())
            {
                if (costcol.ColumnType == "System.String")
                {
                    ddlDescription.Items.Add(new ListItem(costcol.Columns, costcol.ColumnType));
                }
            }
            ddlDescription.DataBind();
            ddlDescription.Items.Insert(0, new ListItem("--Select Desc.--", "0"));
        }
    //(Same code for Bind_ddlUnitofMeasure(list_unit))
    public List Columns(DataTable dt)
        {
            List list=new List();
            CostColumns CC ;
            foreach (DataColumn col in dt.Columns)
            {
                CC = new CostColumns();
                CC.Columns=Convert.ToString(col.ColumnName);
                CC.ColumnType=Convert.ToString(col.DataType);
                list.Add(CC);
            }
            return list;
        }

И вот тут все идет не так:-
protected void Btn_ImportRecords_Click(object sender, EventArgs e)
        {
            DataTable dt_Temp= (DataTable)ViewState["TempImport"];
            DataTable dt_Import = new DataTable();
            Int32 i = costCodeNo();
            string ccn = ddlCostCodeNumber.SelectedItem.Text;//gives same selected option(CostCodeNumber)
            string desc = ddlDescription.SelectedItem.Text;//gives same selected option
            string unit = ddlUnitofMeasure.SelectedItem.Text;//gives same selected option
            dt_Import.Columns.Add(new DataColumn("CostCodeNo", typeof(Int32)));
            dt_Import.Columns.Add(new DataColumn(ddlCostCodeNumber.SelectedItem.Text, typeof(string)));
            dt_Import.Columns.Add(new DataColumn(ddlDescription.SelectedItem.Text, typeof(string)));//throws exception that dt_Import already has same column name
    }


Что я уже пробовал:

Я пробовал создавать разные таблицы данных для разных выпадающих списков, но пока безуспешно.

Karthik_Mahalingam

покажите код для Столбцы функция и выберите запрос

sam_matte

Я обновил код, пожалуйста, посмотрите

Karthik_Mahalingam

сколько там листов

sam_matte

пока есть только один лист.

Karthik_Mahalingam

тогда данные будут одинаковыми, так как вы используете один и тот же набор данных для всех ddl

sam_matte

Если вы посмотрите на первый раздел кода, то увидите, что я заполнил различные таблицы данных oledbdataadapter. Я не использую один и тот же datatable для заполнения выпадающих списков.

Karthik_Mahalingam

Но адаптер тот же самый

sam_matte

Найти решение. До сих пор я использовал списки для заполнения выпадающих списков, вместо этого я использовал таблицы данных напрямую. Кроме того, вместо того, чтобы вставлять типы столбцов в качестве selectedvalue выпадающих списков, Я заменил тип столбца именами столбцов. Новые изменения были приняты незамедлительно. В любом случае, спасибо за ваши усилия, Картик.

Karthik_Mahalingam

крутой

0 Ответов