【问题标题】:DropdownList SelectedValue property doesn't accept value during edit operationDropdownList SelectedValue 属性在编辑操作期间不接受值
【发布时间】:2015-01-09 16:06:37
【问题描述】:

我在gridview 中有一个级联dropdownlist,其中包含 5 列,分别是 ItemsType、ItemList、UnitPrice、Quantity 和 Total。在第一个 dropdownlist 中选择 ItemsType 将填充第二个 dropdownlist 中的项目,即绑定到数据库的 ItemList。 我遇到的问题是,当我单击编辑button 时,虽然我分配了selectedValue,但未选择第二个dropdownlist 项目类型中的项目。 当我在调试模式下运行网络表单时,我看到虽然值已正确分配给dropdownlist.selectedvalue,但它根本不接受该值。 奇怪的是,当我在第一次调试后第二次单击编辑button 时,下拉列表中的项目被正确选择。

我用过以下

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

【问题讨论】:

  • 你在使用 AjaxControlToolkit 中的 CascadingDropDown 吗?
  • 不,我没有使用 AjaxControlToolkit。要填充第二个下拉列表中的项目,我正在使用 ddlItemsType_SelectedIndexChanged 方法。
  • 你需要重新绑定DropDownList。
  • @king.code 很有效。我想知道为什么以前的代码实际上不起作用。尽管未选择正确的项目,但第二个下拉列表中绑定了所有正确的数据。

标签: c# asp.net gridview drop-down-menu cascading


【解决方案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;
}

但我不知道为什么在我第二次运行调试时之前的代码会起作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-16
    相关资源
    最近更新 更多