簡體   English   中英

更新行時,我需要在asp gridview中獲取下拉列表的值

[英]I need to get the value of a drop down list in an asp gridview when updating the row

一切都應該工作,但我不明白為什么我不能從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'的異常,但未在用戶代碼中處理

附加信息:對象引用未設置為對象的實例。

我很確定您需要先選擇一個單元格,然后才能可靠地調用“ FindControl”

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

由於您的listMoneda控件是在Page_Init事件后動態創建的,因此它沒有在ViewState中注冊,因此無法在PostBack上找到。 閱讀此說明以獲取解決方案

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM