Свойство DropdownList SelectedValue не принимает значение во время операции редактирования

У меня есть каскад dropdownlist внутри gridview который содержит 5 столбцов, которые являются ItemsType, ItemList, UnitPrice, Количество и Итого. Выбор ItemsType в первом dropdownlist будет заполнять элементы во 2-м dropdownlist т.е. ItemList, который связан с базой данных. Проблема, которую я получаю, заключается в том, что, когда я нажимаю Edit button, предметов во 2 dropdownlist Стиль элемента не выбран, хотя я назначил selectedValue, Когда я запустил веб-форму в режиме отладки, я увидел, что хотя значение было правильно присвоено dropdownlist.selectedvalue, он не принимает значение вообще. Странная вещь в том, что когда я нажимаю на редактировать button во второй раз после 1-ой отладки элементы в выпадающем списке выбраны правильно.

Я использовал следующее

ddlCarriedItems.SelectedValue = SValue;

Хотя SValue имеет значения itemlist, SelectedValue не отображает ничего.

Вот код

protected void btnEdit_Click(object sender, EventArgs e)
    {
        try
        {
            Button btn = (Button)sender;
            GridViewRow gv = (GridViewRow)btn.NamingContainer;
            string VRM_id = gv.Cells[0].Text;                
            dc.Company_code = Convert.ToInt32(Session["company_code"].ToString());
            dc.Vrm_id = Convert.ToInt32(VRM_id);               
            DataTable dtVRM_CP = vrmbll.edit_VRM_carried_products(dc);
            int rowIndex = 0;
            if (dtVRM_CP.Rows.Count > 0)
            {
                for (int i = 0; i < dtVRM_CP.Rows.Count; i++)
                {                        
                    DropDownList ddlItemsType = (DropDownList)gvCarriedItems.Rows[rowIndex].Cells[1].FindControl("ddlItemsType");
                    DropDownList ddlCarriedItems = (DropDownList)gvCarriedItems.Rows[rowIndex].Cells[2].FindControl("ddlCarriedItems");
                    TextBox txtItemPrice = (TextBox)gvCarriedItems.Rows[rowIndex].Cells[3].FindControl("txtItemPrice");
                    TextBox txtItemQty = (TextBox)gvCarriedItems.Rows[rowIndex].Cells[4].FindControl("txtItemQty");
                    TextBox txtItemTotal = (TextBox)gvCarriedItems.Rows[rowIndex].Cells[5].FindControl("txtItemTotal");

                    ddlItemsType.SelectedIndex = Convert.ToInt32((dtVRM_CP.Rows[i]["items_type"]).ToString());
                    int itemstype = ddlItemsType.SelectedIndex;
                    string SValue = dtVRM_CP.Rows[i]["items"].ToString();                        
                    if (itemstype == 1)
                    {                            
                        ddlCarriedItems.SelectedValue =SValue;                               
                    }
                    else if (itemstype == 2)
                    {                            
                        ddlCarriedItems.SelectedValue = SValue;                            
                    }
                    else if (itemstype == 3)
                    {
                        ddlCarriedItems.SelectedValue = SValue;                            
                    }
                    else
                    { }
                    txtItemPrice.Text = dtVRM_CP.Rows[i]["items_price"].ToString();
                    txtItemQty.Text = dtVRM_CP.Rows[i]["items_qty"].ToString();
                    txtItemTotal.Text = dtVRM_CP.Rows[i]["items_total"].ToString();
                    if (i != (dtVRM_CP.Rows.Count) - 1 && gvCarriedItems.Rows.Count != (dtVRM_CP.Rows.Count))
                    {
                        AddNewRow();
                    }                        
                    rowIndex++;
                }
            }
        }
        catch 
        { }
    }

1 ответ

Решение

Хорошо, я нашел проблему в своем коде. Дело в том, что я должен был связать dropdownlist каждый раз перед присвоением значения ddlCarriedItems.SelectedValue, Я изменил свой код в соответствии с предложением @king.code:

if (itemstype == 1)
{
    DataTable dt = vrmbll.select_raw_materials_production(dc);
    ddlCarriedItems.DataSource = dt;
    ddlCarriedItems.DataValueField = "ID";
    ddlCarriedItems.DataTextField = "Name";
    ddlCarriedItems.DataBind();
    ddlCarriedItems.Items.Insert(0, new ListItem("----- Select -----", "-1"));
    ddlCarriedItems.SelectedValue = SValue;
}

Но я понятия не имею, почему предыдущий код работал, когда я запускал отладку во второй раз.

Другие вопросы по тегам