2015-01-09 1 views
0

안에 ItemsType, ItemList, UnitPrice, Quantity 및 Total 인 5 개의 열이 포함 된 계단식 dropdownlist이 있습니다. 첫 번째 dropdownlist에서 ItemsType을 선택하면 데이터베이스에 바인딩 된 두 번째 dropdownlist 즉 ItemList에 항목이 채워집니다. 편집 button을 클릭하면 selectedValue을 할당했지만 두 번째 dropdownlist 항목 유형의 항목이 선택되지 않습니다. 디버깅 모드에서 webform을 실행할 때 값이 올바르게 dropdownlist.selectedvalue에 할당되었지만 값을 전혀 받아들이지 못하는 것을 보았습니다. 이상한 점은 첫 번째 디버그 후 두 번째로 button 편집을 클릭하면 드롭 다운 목록의 항목이 올바르게 선택된다는 것입니다.DropdownList SelectedValue 속성이 편집 작업 중에 값을 허용하지 않습니다.

내가 사용한 다음

ddlCarriedItems.SelectedValue = s 값;

SValue에는 itemlist의 값이 있지만 SelectedValue는 none을 표시합니다.

다음은 코드입니다.

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 
     { } 
    } 
+0

AjaxControlToolkit의 CascadingDropDown을 사용하고 있습니까? – dario

+0

아니요, AjaxControlToolkit을 사용하지 않습니다. 두 번째 드롭 다운 목록에 항목을 채우려면 ddlItemsType_SelectedIndexChanged 메서드를 사용하고 있습니다. – TFrost

+1

그런 다음 DropDownList를 다시 바인드해야합니다. – dario

답변

0

나는 내 코드에서이 문제를 발견했다. 문제는 ddlCarriedItems.SelectedValue에 값을 할당하기 전에 매번 dropdownlist을 바인딩해야한다는 것입니다. @ 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; 
} 

을하지만 내가 2 시간 동안 디버깅을 실행할 때 앞의 코드는 일을 왜 모르겠어요.

관련 문제