下拉列表动态创建为Repeater动态创建的asp.net

时间:2015-09-02 14:23:14

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

我在创建此转发器期间创建动态转发器我使用autopostback = true创建一些下拉列表,并添加处理程序selectindexchanged。我想知道如何保持绑定转发器内部(!IsNotPostBack)而不会丢失转发器信息。总之,如果我在notpostback中保持绑定转发器,当我更改下拉列表时,不会呈现转发器。 好混淆?我将发布部分代码:

Default.cs

protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
        {
            BindRepeater2();
        }
    }

private void BindRepeater2()
{
    Repeater rContainer = null;
    HtmlGenericControl div = new HtmlGenericControl("div");
    HtmlGenericControl table = new HtmlGenericControl("table");
    div.Attributes.Add("class", "CompApp_TableScroll");
    table.Attributes.Add("class", "CompApp_DataTable");
    table.Attributes.Add("width", "100%");
    try
    {
        DataTable dt = new DataTable();
        dt.Columns.Add("Id", typeof(int));
        dt.Columns.Add("Name", typeof(string));
        dt.Columns.Add("Address", typeof(string));
        dt.Columns.Add("DropDown", typeof(string));
        dt.Rows.Add(25, "Rk", "Gurgaon");
        dt.Rows.Add(50, "Sachin", "Noida");
        dt.Rows.Add(10, "Nitin", "Noida");
        dt.Rows.Add(21, "Aditya", "Meerut");
        DataSet ds = new DataSet();
        ds.Tables.Add(dt);
        if (dt.Rows.Count > 0)
        {
            rContainer = new Repeater();
            rContainer.DataSource = dt;
            rContainer.DataBind();
            foreach (DataTable dtCluster in ds.Tables)
            {
                rContainer = new Repeater();
                rContainer.ItemTemplate = new RepeaterTemplate2(ListItemType.Item);
                rContainer.HeaderTemplate = new RepeaterTemplate2(ListItemType.Header);
                rContainer.FooterTemplate = new RepeaterTemplate2(ListItemType.Footer);
                rContainer.DataSource = dtCluster;
                table.Controls.Add(rContainer);
            }
            div.Controls.Add(table);
        }
        div1.Controls.Add(div);
        rContainer.ItemDataBound += rContainer_ItemDataBound;
        rContainer.ID = "rpt1";
        rContainer.DataBind();
    }
    catch (Exception ex)
    {
        throw ex;
    }
}

void rContainer_ItemDataBound(object sender, RepeaterItemEventArgs e)
{
    if (e.Item.ItemType == ListItemType.Item || e.Item.ItemType == ListItemType.AlternatingItem)
    {
        DropDownList ddl = new DropDownList();
        ddl = (DropDownList)e.Item.FindControl("ddl");
        ddl.AutoPostBack = true;
        ddl.SelectedIndexChanged += new EventHandler(ddl_SelectedIndexChanged);
    }
}

private void ddl_SelectedIndexChanged(object sender, EventArgs e)
{
    DropDownList ddl2 = new DropDownList();
    ddl2 = (DropDownList)sender;
    Response.Write(ddl2.SelectedValue);
}

RepeaterTemplate2.cs

public class RepeaterTemplate2 : System.Web.UI.ITemplate
{
    ListItemType vTemplateItemType = ListItemType.Separator;

    public RepeaterTemplate2(ListItemType pListItemType)
    {
        vTemplateItemType = pListItemType;
    }

    public void InstantiateIn(System.Web.UI.Control container)
    {
        Literal lc = new Literal();
        HtmlGenericControl tr = new HtmlGenericControl("tr");
        HtmlGenericControl td = new HtmlGenericControl("td");
        switch (vTemplateItemType)
        {
            case ListItemType.Header:
                td.InnerHtml = "<u>EmpID</u>";
                tr.Controls.Add(td);
                td = new HtmlGenericControl("td");
                td.InnerHtml = "<u>Name</u>";
                tr.Controls.Add(td);
                td = new HtmlGenericControl("td");
                td.InnerHtml = "<u>Address</u>";
                tr.Controls.Add(td);
                td = new HtmlGenericControl("td");
                td.InnerHtml = "<u>DropdDown</u>";
                tr.Controls.Add(td);
                break;
            case ListItemType.Footer:
                break;

            case ListItemType.Item:
                ; break;
        }
        tr.DataBinding += new EventHandler(lc_DataBinding);
        container.Controls.Add(tr);
    }

    private void lc_DataBinding(object sender, EventArgs e)
    {
        HtmlGenericControl tr = (HtmlGenericControl)sender;
        RepeaterItem vContainer = (RepeaterItem)tr.NamingContainer;
        DataRowView row = (DataRowView)vContainer.DataItem;
        if (row != null)
        {
            for (int i = 0; i < row.DataView.Table.Columns.Count; i++)
            {
                HtmlGenericControl td = new HtmlGenericControl("td");
                if (i == 3)
                {
                    DropDownList ddl = new DropDownList();
                    ddl.ID = "ddl";
                    ddl.Items.Add(new ListItem("valor 1", "1"));
                    ddl.Items.Add(new ListItem("valor 2", "2"));
                    td.Controls.Add(ddl);
                }
                else
                {
                    td.InnerHtml = row[i].ToString();
                }
                tr.Controls.Add(td);
            }
        }
    }
}

0 个答案:

没有答案