繁体   English   中英

组合框 SelectionChangedEvent 不会写入类字段

[英]Combobox SelectionChangedEvent doesn't write to class field

我在将数据写入类字段时遇到问题。 我声明了字段“rcbSelection”,然后在 Page_load() 中初始化它。 然后我尝试在一些组合框 SelectionChangedEvents 中添加数据。

public partial class AddToProcurementPlan : Page
{
    Dictionary<string, int?> rcbSelection;
    protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            rcbSelection = new Dictionary<string, int?>();
            /*other code*/
        }
     }

    protected void rcb_FinancingBudget_SelectedIndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e)
    {
        RadComboBox rcb = (RadComboBox)sender;
        if (rcbSelection.ContainsKey("financingbudget"))
            rcbSelection["financingbudget"] = int.Parse(rcb.SelectedValue);
        else
            rcbSelection.Add("financingbudget", int.Parse(rcb.SelectedValue));
    }

    protected void rcb_BudgetName_SelectedIndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e)
    {
        RadComboBox rcb = (RadComboBox)sender;
        if (rcbSelection.ContainsKey("budget"))
            rcbSelection["budget"] = int.Parse(rcb.SelectedValue);
        else
            rcbSelection.Add("budget", int.Parse(rcb.SelectedValue));
    }

    protected void rcb_FondName_SelectedIndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e)
    {
        RadComboBox rcb = (RadComboBox)sender;
        if (rcbSelection.ContainsKey("fond"))
            rcbSelection["fond"] = int.Parse(rcb.SelectedValue);
        else
            rcbSelection.Add("fond", int.Parse(rcb.SelectedValue));
    }

    protected void rcb_Kfkr_SelectedIndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e)
    {
        RadComboBox rcb = (RadComboBox)sender;
        if (rcbSelection.ContainsKey("kfk"))
            rcbSelection["kfk"] = int.Parse(rcb.SelectedValue);
        else
            rcbSelection.Add("kfk", int.Parse(rcb.SelectedValue));
    }

    protected void rcb_Kekr_SelectedIndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e)
    {
        RadComboBox rcb = (RadComboBox)sender;
        if (rcbSelection.ContainsKey("kekr"))
            rcbSelection["kekr"] = int.Parse(rcb.SelectedValue);
        else
            rcbSelection.Add("kekr", int.Parse(rcb.SelectedValue));
    }

    protected void rcb_BudgetExec_SelectedIndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e)
    {
        RadComboBox rcb = (RadComboBox)sender;
        if (rcbSelection.ContainsKey("budgetexec"))
            rcbSelection["budgetexec"] = int.Parse(rcb.SelectedValue);
        else
            rcbSelection.Add("budgetexec", int.Parse(rcb.SelectedValue));
    }

    protected void rcb_SectionCode_SelectedIndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e)
    {
        RadComboBox rcb = (RadComboBox)sender;
        if (rcbSelection.ContainsKey("section"))
            rcbSelection["section"] = int.Parse(rcb.SelectedValue);
        else
            rcbSelection.Add("section", int.Parse(rcb.SelectedValue));
    }

    protected void rcb_TargetArticle_SelectedIndexChanged(object sender, RadComboBoxSelectedIndexChangedEventArgs e)
    {
        RadComboBox rcb = (RadComboBox)sender;
        if (rcbSelection.ContainsKey("targetarticle"))
            rcbSelection["targetarticle"] = int.Parse(rcb.SelectedValue);
        else
            rcbSelection.Add("targetarticle", int.Parse(rcb.SelectedValue));
    }
}

但是当我在最后一个事件上设置停止点时,我可以看到 rcbSelection 为空。 我做错了什么? 请帮帮我。

我怀疑你的 rcbSelection 字典在你的 SelectedIndexChanged 事件回发后被重置,因为字典没有被保存在某种内存存储中,比如 ViewState。

考虑保留您的 rcbSelection 字典,例如...


        private Dictionary<string, int?> rcbSelection
        {
            get
            {
                if(this.ViewState["rcbSelection"] != null)
                {
                    return (Dictionary<string, int?>)this.ViewState["rcbSelection"];
                }

                return new Dictionary<string, int?>();
            }

            set
            {
                this.ViewState["rcbSelection"] = value;
            }
        }

同样在您的 page_load 事件中,如果您不希望在每次回发后重置字典,请考虑删除rcbSelection = new Dictionary<string, int?>(); 从您的 page_load 函数或通过检查它是否是第一个页面加载来仅初始化一次...

        protected void Page_Load(object sender, EventArgs e)
        {
            if (!this.IsPostBack)
            {
                rcbSelection = new Dictionary<string, int?>();
            }

            // other postback code here ... 
        }

希望有帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM