Repeater中的DropdownList SelectedIndexChanged在UpdatePanel下触发并单击转发器外的另一个Dropdownlist

时间:2015-01-13 15:49:19

标签: c# asp.net drop-down-menu postback repeater

我在转发器外面有一个2下拉列表(第一个ddl将触发并刷新转发器的内容,第二个ddl在转发器内的一个项目执行后刷新其列表)和转发器内的下拉列表控件。我不会#39 ; t通过selectedindexchanged触发第1个下拉列表但第2个下拉列表有问题,它还会触发转发器内下拉列表的selectedindexchanged。我在转发器和第二个下拉列表上放置了UpdatePanel,但仍然发生错误。

如何跟踪逐步执行以及为什么selectedindexchanged处理程序会启动?

以下是代码段:

背后的代码:

public partial class NewStyleItem : System.Web.UI.Page
{
    protected StyleTemplateManager styleTempMngr = new StyleTemplateManager();

    protected StyleFabricationManager styleFabMngr = new StyleFabricationManager();

    protected List<ComponentReferenceView> ReferenceLookUpList
    {
        get
        {
            return (List<ComponentReferenceView>)ViewState["ReferenceLookUpView"];
        }
        set
        {
            ViewState["ReferenceLookUpView"] = value;
        }
    }

    protected List<ComponentReferenceView> ReferenceViewList
    {
        get
        {
            return (List<ComponentReferenceView>)ViewState["CompReferenceView"];
        }
        set
        {
            ViewState["CompReferenceView"] = value;
        }
    }

    protected void Page_Load(object sender, EventArgs e)
    {
        if (this.IsPostBack == false)
        {
            LoadBrandList();
            ddlGarmentList.Enabled = false;

            //ReferenceLookUpList = new List<ComponentReferenceView>();
        }
        else
        {
        }

        //rptStyleComponents.DataSource = ReferenceLookUpList;
        //rptStyleComponents.DataBind();
    }

    protected void LoadBrandList()
    {
        BrandManager brandMngr = new BrandManager();
        ddlBrandList.Items.Clear();

        ddlBrandList.Items.Add(new ListItem { Text = "Select brand", Value = "" });
        foreach (Brand item in brandMngr.Brands())
        {
            ddlBrandList.Items.Add(new ListItem
            {
                Text = item.BrandDescription,
                Value = item.BrandCode
            });
        }
    }

    protected void LoadComponentInfo(string BrandCode)
    {
        if (styleTempMngr.FindTemplateByBrandCode(BrandCode) == true)
        {
            ReferenceLookUpList = (from StyleComponent i in styleFabMngr.ComponentList
                                   join StyleFabReference x in styleTempMngr.ReferenceList on
                                   i.SectionCode equals x.SectionCode
                                   select new ComponentReferenceView
                                   {
                                       InOrder = x.SortOrder,
                                       IsNeeded = x.IsRequired,
                                       SCode = x.SeriesCode,
                                       SecCode = x.SectionCode,
                                       SecName = i.SectionName,
                                       EntryValue = x.DataCharacter
                                   }).OrderBy(p => p.InOrder).ToList();

            ReferenceLookUpList.Where(row => row.SecCode == "BCODE").ToList()
                .ForEach(refItem => refItem.EntryValue = ddlBrandList.SelectedValue);

            var DistinctList = (from StyleFabReference x in styleTempMngr.ReferenceList.OrderBy(p => p.SortOrder).ToList()
                                where x.SectionCode != "SPCHAR" && x.SectionCode != "BCODE"
                                select x.SectionCode).Distinct().ToList();

            ReferenceViewList = (from StyleComponent i in styleFabMngr.ComponentList
                                 join x in DistinctList on
                                 i.SectionCode equals x
                                 select new ComponentReferenceView
                                 {
                                     SecCode = x,
                                     SecName = i.SectionName
                                 }).OrderBy(p => p.InOrder).ToList();
        }
        else
            ReferenceViewList = new List<ComponentReferenceView>();

        rptStyleComponents.DataSource = ReferenceViewList;
        rptStyleComponents.DataBind();

    }

    protected void LoadGarments(string ApparelCode)
    {
        if (string.IsNullOrEmpty(ddlBrandList.SelectedValue) == true)
        {
            ddlGarmentList.SelectedIndex = 0;
            ddlGarmentList.Enabled = false;
        }
        else
        {
            ddlGarmentList.Enabled = true;
            GarmentManager gmMngr = new GarmentManager();
            List<Garment> garmentList = new List<Garment>();
            garmentList = gmMngr.GetGarmentsByBrand(ddlBrandList.SelectedValue, ApparelCode);
            ddlGarmentList.Items.Clear();
            ddlGarmentList.Items.Add(new ListItem { Text = "Select garment", Value = "" });

            foreach (Garment item in garmentList)
            {
                ddlGarmentList.Items.Add(new ListItem { Text = item.GarmentDescription, Value = item.GarmentCode });
            }
        }
    }

    protected void ddlBrandList_SelectedIndexChanged(object sender, EventArgs e)
    {
        txtNewStyleNo.Text = string.Empty;
        if (string.IsNullOrEmpty(ddlBrandList.SelectedValue) == false)
            LoadComponentInfo(ddlBrandList.SelectedValue);
    }

    [Serializable]
    public class ComponentReferenceView
    {
        public string SCode
        {
            get;
            set;
        }
        public string SecCode
        {
            get;
            set;
        }
        public string SecName
        {
            get;
            set;
        }
        public int InOrder
        {
            get;
            set;
        }
        public bool IsNeeded
        {
            get;
            set;
        }
        public string EntryValue
        {
            get;
            set;
        }
    }

    protected void rptStyleComponents_ItemDataBound(object sender, RepeaterItemEventArgs e)
    {

    }

    protected void rptStyleComponents_ItemCreated(object sender, RepeaterItemEventArgs e)
    {
        if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
        {
            DropDownList ddlControl = (DropDownList)e.Item.FindControl("ddlDataSelection");

            if (ddlControl != null)
            {
                ddlControl.AppendDataBoundItems = true;
                ddlControl.Items.Add(new ListItem { Text = "Select " + ReferenceViewList[e.Item.ItemIndex].SecName.ToLowerInvariant(), Value = "" });
                var itemlist = (from x in styleFabMngr.ComponentRowItems(ReferenceViewList[e.Item.ItemIndex].SecCode).AsEnumerable()
                                select new ListItem
                                {
                                    Text = x.Field<string>("col_name"),
                                    Value = x.Field<string>("col_value")
                                });
                ddlControl.Items.AddRange(itemlist.ToArray<ListItem>());

                ddlControl.EnableViewState = false;
                ddlControl.AutoPostBack = true;
                ddlControl.SelectedIndexChanged += new EventHandler(DropDownListSelectedIndexChanged);
            }
        }
    }

    protected virtual void DropDownListSelectedIndexChanged(object sender, EventArgs e)
    {
        DropDownList ddl = (DropDownList)sender;
        RepeaterItem item = (RepeaterItem)ddl.NamingContainer;

        ReferenceViewList[item.ItemIndex].EntryValue = ddl.SelectedValue;
        ConstructStyleNo();

        var Apparelfound = ReferenceViewList.Where(x => x.SecCode == "APCODE" &&
           string.IsNullOrEmpty(x.EntryValue) == false).FirstOrDefault();

        if (Apparelfound != null)
        {
            ddlGarmentList.Enabled = true;
            LoadGarments(Apparelfound.EntryValue);
        }
        else
        {
            ddlGarmentList.Enabled = false;
        }
    }

    private void ConstructStyleNo()
    {
        foreach (ComponentReferenceView item in ReferenceViewList)
        {
            ReferenceLookUpList.Where(row => row.SecCode == item.SecCode).ToList()
                .ForEach(refItem => refItem.EntryValue = item.EntryValue);
        }

        string sResult = string.Empty;
        var result = (from x in ReferenceLookUpList.OrderBy(y => y.InOrder)
                      select x.EntryValue);

        txtNewStyleNo.Text = string.Empty;
        if (result != null)
            txtNewStyleNo.Text = String.Join("", result) + "0001";

    }

    private void ConstructStyleDescription()
    {
        txtStyleDescription.Text = ddlBrandList.SelectedItem.Text + "-" + ddlGarmentList.SelectedItem.Text;
    }

    protected void ddlGarmentList_SelectedIndexChanged(object sender, EventArgs e)
    {
        txtStyleDescription.Text = string.Empty;
        if (string.IsNullOrEmpty(ddlGarmentList.SelectedValue) == false)
            ConstructStyleDescription();
    }
}

ASPX:

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <asp:UpdatePanel ID="upnlNewFabrication" runat="server">
        <ContentTemplate>
            <h1>
            New Style Item
            </h1>
            <br />
            <%--<usrCtrl:style_generation ID="stylegen_frm" runat="server">
            </usrCtrl:style_generation>--%>

        <table>
            <tr>
                <td>
                  Brand :
                </td>
                <td>
                    <asp:DropDownList ID="ddlBrandList" runat="server" 
                        onselectedindexchanged="ddlBrandList_SelectedIndexChanged" 
                        AutoPostBack="True">
                    </asp:DropDownList> 
                </td>
            </tr>           
            <tr>
                <td colspan="2">
                &nbsp;
                </td>
            </tr>
            <tr>
                <td>
                    Generated Style# :
                </td>
                <td>
                    <asp:TextBox ID="txtNewStyleNo" runat="server" ReadOnly="true"></asp:TextBox>                   
                </td>
            </tr>
            <tr>
                <td>
                    Style Description :
                </td>
                <td>
                    <asp:TextBox ID="txtStyleDescription" runat="server" ReadOnly="true"></asp:TextBox>                   
                </td>
            </tr>
                    <asp:Repeater ID="rptStyleComponents" runat="server" 
                        onitemdatabound="rptStyleComponents_ItemDataBound" 
                        onitemcreated="rptStyleComponents_ItemCreated" 
                EnableViewState="True">
                        <ItemTemplate>
                            <asp:UpdatePanel ID="upnlComponent" runat="server">
                                <ContentTemplate>
                                     <tr>
                                        <td>
                                            <asp:Label ID="lblSectionName" runat="server" Text='<%# Eval("SecName")%>' ></asp:Label>
                                        </td>
                                        <td>
                                            <asp:DropDownList ID="ddlDataSelection" runat="server">
                                            </asp:DropDownList>                    
                                        </td>
                                    </tr>                               
                                </ContentTemplate>
                                <Triggers>
                                    <asp:PostBackTrigger ControlID="ddlDataSelection" />
                                </Triggers>
                            </asp:UpdatePanel>                           
                        </ItemTemplate>
                    </asp:Repeater>   
        </table>
        <br />
        <table>
            <tr>
            <td colspan="2">Description Items</td>
            </tr>
            <tr>
                <td colspan="4"></td>
            </tr>
            <tr>
                <td>Garment Type:</td>
                <td>
                    <asp:UpdatePanel ID="upGarment" runat="server" >
                    <ContentTemplate>
                        <asp:DropDownList ID="ddlGarmentList" runat="server" 
                            AppendDataBoundItems="True" AutoPostBack="True" 
                            onselectedindexchanged="ddlGarmentList_SelectedIndexChanged">
                            <asp:ListItem Text = "Select garment" Value = ""></asp:ListItem>    
                        </asp:DropDownList>
                        <asp:SqlDataSource ID="sdsGarment" runat="server" 
                            ConnectionString="<%$ ConnectionStrings:IRMSConnectionString %>" 
                            SelectCommand="Select * from Garments"></asp:SqlDataSource>
                    </ContentTemplate>
                    <Triggers>
                        <asp:PostBackTrigger ControlID="ddlGarmentList"  />
                    </Triggers>
                    </asp:UpdatePanel>

                </td>
            </tr>
            <tr>
                <td>Cost Price:</td>
                <td>
                    <asp:TextBox ID="txtCostPrice" runat="server"></asp:TextBox></td>
                <td>SRP :</td>
                <td><asp:TextBox ID="txtSRP" runat="server"></asp:TextBox></td>
            </tr>
            <tr>
                <td>Quantity :</td>
                <td><asp:TextBox ID="TextBox1" runat="server"></asp:TextBox></td>
                <td>Week :</td>
                <td><asp:TextBox ID="TextBox2" runat="server"></asp:TextBox></td>
            </tr>
        </table>

        </ContentTemplate>
    </asp:UpdatePanel>
</asp:Content>

0 个答案:

没有答案