简体   繁体   English

组合框 SelectionChangedEvent 不会写入类字段

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

I have a problem with writing data to class field.我在将数据写入类字段时遇到问题。 I declared field "rcbSelection" and then initialize it in Page_load().我声明了字段“rcbSelection”,然后在 Page_load() 中初始化它。 Then I try to add data in it in some combobox SelectionChangedEvents.然后我尝试在一些组合框 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));
    }
}

But when I set stop point on last event I can see that rcbSelection is empty.但是当我在最后一个事件上设置停止点时,我可以看到 rcbSelection 为空。 What i doing wrong?我做错了什么? Help me please.请帮帮我。

I suspect your rcbSelection dictionary is being reset after the postbacks of your SelectedIndexChanged events since the dictionary isn't being persisted in some sort of in memory storage like ViewState.我怀疑你的 rcbSelection 字典在你的 SelectedIndexChanged 事件回发后被重置,因为字典没有被保存在某种内存存储中,比如 ViewState。

Consider persisting your rcbSelection dictionary like...考虑保留您的 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;
            }
        }

Also in your page_load event if you don't want the dictionary to be reset after each postback consider removing rcbSelection = new Dictionary<string, int?>();同样在您的 page_load 事件中,如果您不希望在每次回发后重置字典,请考虑删除rcbSelection = new Dictionary<string, int?>(); from your page_load function or initializing only once by checking if it's the first page load by...从您的 page_load 函数或通过检查它是否是第一个页面加载来仅初始化一次...

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

            // other postback code here ... 
        }

Hope that helps.希望有帮助。

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

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