我需要在更新行时获取asp gridview中下拉列表的值

时间:2015-06-13 20:29:31

标签: c# asp.net

一切都应该有效,但我无法弄清楚为什么我无法从ddl中获取价值。我知道代码不太干净。

protected void gridProduse_RowEditing(object sender, GridViewEditEventArgs e)
    {
        gridProduse.EditIndex = e.NewEditIndex;
        gridProduse.DataBind();


        using (var context = new SATContext())
        {
            var query = from t in context.TipuriProduse
                        select t.Denumire;
            DropDownList list = new DropDownList();
            list.DataSource = query.ToList();
            list.DataBind();
            list.ID = "ddlTipProdus";
            list.Height = 27;
            DropDownList listMoneda = new DropDownList();
            listMoneda.ID = "ddlMoneda";
            listMoneda.Items.Add("RON");
            listMoneda.Items.Add("EUR");
            listMoneda.Items.Add("USD");
            listMoneda.Height = 27;
            gridProduse.Rows[e.NewEditIndex].Cells[7].Controls.Add(list);
            gridProduse.Rows[e.NewEditIndex].Cells[6].Controls.Add(listMoneda);
            gridProduse.Rows[e.NewEditIndex].Cells[6].Controls[0].Visible = false;
            gridProduse.Rows[e.NewEditIndex].Cells[7].Controls[0].Visible = false;
        }
    }

    protected void gridProduse_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        GridViewRow row = gridProduse.Rows[e.RowIndex];
        Produs prod = new Produs();
        prod.ProdusId = Convert.ToInt32(((TextBox)(row.Cells[2].Controls[0])).Text);
        prod.Denumire = ((TextBox)(row.Cells[3].Controls[0])).Text;

        DropDownList ddl = (DropDownList)gridProduse.Rows[e.RowIndex].FindControl("ddlMoneda");
        prod.Moneda = ddl.SelectedValue; // this is where i get the error
        //prod.Moneda = ((row.FindControl("ddlMoneda") as DropDownList)).SelectedValue;
        prod.PretCuTVA = Convert.ToInt32(((TextBox)(row.Cells[5].Controls[0])).Text);
        prod.PretFaraTVA = Convert.ToInt32 (((TextBox)(row.Cells[4].Controls[0])).Text);
        lit1.Text = prod.ProdusId.ToString();
        using (var context = new SATContext())
        {
            IRepository<Produs> ProdusRepository = new ProdusRepository();
            ProdusRepository.Update(prod);
        }
        gridProduse.EditIndex = -1;
        gridProduse.DataBind();

        Response.Redirect("Produse.aspx");
    }

这就是错误:

Licenta.dll中出现“System.NullReferenceException”类型的异常,但未在用户代码中处理

附加信息:未将对象引用设置为对象的实例。

1 个答案:

答案 0 :(得分:0)

我很确定你需要选择一个单元才能可靠地调用`FindControl'

(DropDownList)gridProduse.Rows[e.RowIndex].Cells[SomeCell].FindControl("ddlMoneda");

<击>

由于listMoneda控件是在Page_Init事件之后动态创建的,因此它未在ViewState中注册,因此无法在PostBack上找到。 Read this explanation for a solution