簡體   English   中英

GridView在回發之間缺少數據

[英]GridView missing data between postbacks

所以基本上我在做一個管理包裝物料系統。 場景是,當我從gvSPU中選擇時,gvFinalized應該在數據庫中顯示該項目。 之后,當我將新項目添加到gvFinalized中時,它應該繼續堆疊項目,而不是清除先前的記錄並顯示添加的最新記錄。 這是代碼:

private List<DistributionStandardPackingUnitItems> tempDistSPUI
{
    get
    {
        if (ViewState["tempDistSPUI"] == null)
        {
            return new List<DistributionStandardPackingUnitItems>();
        }
        else
        {
            return (List<DistributionStandardPackingUnitItems>)ViewState["tempDistSPUI"];
        }
    }
    set
    {
        ViewState["tempDistSPUI"] = value;
    }
}

protected void gvSPU_OnRowCommand(object sender, GridViewCommandEventArgs e)
{
    int packagesNeeded = prodPackBLL.getPackagesNeededByDistributionID(distributionID);

    int rowNo = int.Parse(e.CommandArgument.ToString());
    SPUname = this.gvSPU.DataKeys[rowNo].Value.ToString();
    lblSPUname.Text = SPUname;

    List<DistributionStandardPackingUnitItems> templist = new List<DistributionStandardPackingUnitItems>();
    templist = tempDistSPUI;

    templist = packBLL.getAllDistSPUItemByDistributionIDnSPUName(distributionID, SPUname);
    gvFinalised.DataSource = templist;
    gvFinalised.DataBind();

    this.tempDistSPUI = templist;
}

選擇gvSPU行時,應將所有記錄存儲到臨時列表中並顯示在gvFinalized中。

List<string> prodVariantIDList = new List<string>();
private List<string> SelectedVariantDetailIDs
{
    get
    {
        if (ViewState["SelectedVariantDetailIDs"] == null)
        {
            return new List<string>();
        }
        else
        {
            return (List<string>)ViewState["SelectedVariantDetailIDs"];
        }
    }
    set
    {
        ViewState["SelectedVariantDetailIDs"] = value;
    }
}

protected void lbnAdd_Click(object sender, EventArgs e)
{
    List<ProductPacking> prodVariantDetail = new List<ProductPacking>();

    int packagesNeeded = prodPackBLL.getPackagesNeededByDistributionID(distributionID);

    // get the last product variant IDs from ViewState
    prodVariantIDList = this.SelectedVariantDetailIDs;

    foreach (RepeaterItem ri in Repeater1.Items)
    {
        GridView gvProduct = (GridView)ri.FindControl("gvProduct");
        foreach (GridViewRow gr in gvProduct.Rows)
        {
            CheckBox cb = (CheckBox)gr.FindControl("cbCheckRow");
            //Prevent gvFinalised to store duplicate products
            if (cb.Checked && !prodVariantIDList.Any(i => i == gvProduct.DataKeys[gr.RowIndex].Value.ToString()))
            {
                // add the corresponding DataKey to idList
                prodVariantIDList.Add(gvProduct.DataKeys[gr.RowIndex].Value.ToString());
            }
        }
    }

    for (int i = 0; i < prodVariantIDList.Count; i++)
    {
        prodVariantDetail.Add(prodPackBLL.getProdVariantDetailByID(prodVariantIDList[i]));
    }

    gvFinalised.DataSource = prodVariantDetail;
    gvFinalised.DataBind();

    // save prodVariantIDList to ViewState
    this.SelectedVariantDetailIDs = prodVariantIDList;
}

單擊添加按鈕時,它應在gridview中追加記錄,而不是擦除記錄並插入選中的記錄。

我正在使用viewState在回發之間存儲記錄。 但是,當我嘗試將新項目添加到gvFinalized中時,臨時列表中的先前記錄將消失,並且gvFinalized將使用prodVariantDetail列表中的結果填充。

有指導嗎? 提前致謝。

編輯

List<DistributionStandardPackingUnitItems> itemList = new List<DistributionStandardPackingUnitItems>();
protected void gvSPU_OnRowCommand(object sender, GridViewCommandEventArgs e)
    {
        int packagesNeeded = prodPackBLL.getPackagesNeededByDistributionID(distributionID);

        int rowNo = int.Parse(e.CommandArgument.ToString());
        SPUname = this.gvSPU.DataKeys[rowNo].Value.ToString();
        lblSPUname.Text = SPUname;

        itemList = tempDistSPUI;

        itemList = packBLL.getAllDistSPUItemByDistributionIDnSPUName(distributionID, SPUname);
        gvFinalised.DataSource = itemList;
        gvFinalised.DataBind();

        this.tempDistSPUI = itemList;
    }

    protected void lbnAdd_Click(object sender, EventArgs e)
    {
        List<DistributionStandardPackingUnitItems> prodVariantDetail = new List<DistributionStandardPackingUnitItems>();

        int packagesNeeded = prodPackBLL.getPackagesNeededByDistributionID(distributionID);

        // get the last product variant IDs from ViewState
        prodVariantIDList = this.SelectedVariantDetailIDs;

        foreach (RepeaterItem ri in Repeater1.Items)
        {
            GridView gvProduct = (GridView)ri.FindControl("gvProduct");
            foreach (GridViewRow gr in gvProduct.Rows)
            {
                CheckBox cb = (CheckBox)gr.FindControl("cbCheckRow");
                //Prevent gvFinalised to store duplicate products
                if (cb.Checked && !prodVariantIDList.Any(i => i == gvProduct.DataKeys[gr.RowIndex].Value.ToString()))
                {
                    // add the corresponding DataKey to idList
                    prodVariantIDList.Add(gvProduct.DataKeys[gr.RowIndex].Value.ToString());
                }
            }
        }

        for (int i = 0; i < prodVariantIDList.Count; i++)
        {
            prodVariantDetail.Add(packBLL.getProdVariantDetailByID(prodVariantIDList[i]));
        }

        for (int j = 0; j < itemList.Count; j++)
        {
            prodVariantDetail.Add(itemList[j]);
        }

        gvFinalised.DataSource = prodVariantDetail;
        gvFinalised.DataBind();

        }

        // save prodVariantIDList to ViewState
        this.SelectedVariantDetailIDs = prodVariantIDList;
    }

您必須添加的元素tempDistSPUIprodVariantDetail結合之前prodVariantDetailgvFinalised

這是我將使用List.AddRange方法執行的操作

protected void lbnAdd_Click(object sender, EventArgs e)
{
    List<DistributionStandardPackingUnitItems> prodVariantDetail = new List<DistributionStandardPackingUnitItems>();

    int packagesNeeded = prodPackBLL.getPackagesNeededByDistributionID(distributionID);

    // get the last product variant IDs from ViewState
    prodVariantIDList = this.SelectedVariantDetailIDs;

    foreach (RepeaterItem ri in Repeater1.Items)
    {
        GridView gvProduct = (GridView)ri.FindControl("gvProduct");
        foreach (GridViewRow gr in gvProduct.Rows)
        {
            CheckBox cb = (CheckBox)gr.FindControl("cbCheckRow");
            //Prevent gvFinalised to store duplicate products
            if (cb.Checked && !prodVariantIDList.Any(i => i == gvProduct.DataKeys[gr.RowIndex].Value.ToString()))
            {
                // add the corresponding DataKey to idList
                prodVariantIDList.Add(gvProduct.DataKeys[gr.RowIndex].Value.ToString());
            }
        }
    }

    for (int i = 0; i < prodVariantIDList.Count; i++)
    {
        prodVariantDetail.Add(packBLL.getProdVariantDetailByID(prodVariantIDList[i]));
    }

    // get the content of tempDistSPUI from ViewState
    itemList = this.tempDistSPUI;

    // add all elements of itemList to prodVariantDetail
    prodVariantDetail.AddRange(itemList);

    gvFinalised.DataSource = prodVariantDetail;
    gvFinalised.DataBind();

    // save prodVariantIDList to ViewState
    this.SelectedVariantDetailIDs = prodVariantIDList;
}

暫無
暫無

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

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