Как связать значения в выпадающем списке usercontrol?

Я связываю значения в выпадающем списке usercontrol

Но когда я добавляю строку usercontrol, значения времени не связываются в выпадающем списке

Код:

.ascx

   <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="TimesheetUserControl.ascx.cs" Inherits="Portal.TimesheetUserControl" %>
   <table>
   <tr>
   <td>
        <asp:DropDownList ID="DropDownActivities" Width="150px" runat="server"></asp:DropDownList>
    </td>
    <td>
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
    </td>
    <td>
        <asp:TextBox ID="TextBox2" runat="server"></asp:TextBox>
    </td>
    <td>
        <asp:TextBox ID="TextBox3" runat="server"></asp:TextBox>
    </td>
    <td>
        <asp:TextBox ID="TextBox4" runat="server"></asp:TextBox>
    </td>
    <td>
        <asp:TextBox ID="TextBox5" runat="server"></asp:TextBox>
    </td>
    <td>
        <asp:TextBox ID="TextBox7" runat="server"></asp:TextBox>
    </td>
</tr>

.aspx

 <uc:Timesheet ID="Timesheet" runat="server" />
    <asp:Repeater ID="rpt1" runat="server">
    <ItemTemplate> 
    </ItemTemplate>
 </asp:Repeater>

 <asp:Button ID="ButtonAdd" runat="server" Text="Add New Row" OnClick="ButtonAdd_Click"/>

.aspx.cs

    protected void Page_Load(object sender, EventArgs e)
    {
      if(!IsPostback)
      {
       BindActivities();
      }
    }

    protected void BindActivities()
    {
        DropDownList dropActivities = Timesheet.FindControl("DropDownActivities") as DropDownList;
        DbConnection.Open();
        OleDbCommand cmd1 = new OleDbCommand("select designation from emp_master where username = '" + username + "'", DbConnection);
        OleDbDataAdapter da = new OleDbDataAdapter(Deptcmd);
            DataSet ds = new DataSet();
            da.Fill(ds);
            // DbConnection.Close();
            dropActivities.DataSource = ds;
            dropActivities.DataTextField = "ActivityName";
            dropActivities.DataBind();
            dropActivities.Items.Insert(0, new ListItem("--Select--", "0"));
   }

    public List<string> NoOfControls
    {
        get
        {
            return ViewState["NoOfControls"] == null ? new List<string>() : (List<string>)ViewState["NoOfControls"];

        }
        set
        {
            ViewState["NoOfControls"] = value;
        }
    }

    protected override void LoadViewState(object savedState)
    {
        base.LoadViewState(savedState);

        if (IsPostBack)
        {
            GenerateControls();

        }

    }

    private void GenerateControls()
    {
        foreach (string i in NoOfControls)
        {
            TimesheetUserControl ctrl = (TimesheetUserControl)Page.LoadControl("TimesheetUserControl.ascx");

            ctrl.ID = i;
            this.rpt1.Controls.Add(ctrl);
        }

    }

    protected void ButtonAdd_Click(object sender, EventArgs e)
    {
        Button thisButton = (Button)sender;
        List<string> temp = null;
        var uc = (TimesheetUserControl)this.LoadControl(@"TimesheetUserControl.ascx");

        string id = Guid.NewGuid().ToString();
        uc.ID = id;

        temp = NoOfControls;
        temp.Add(id);
        NoOfControls = temp;
        rpt1.Controls.Add(uc);

    }

На изображении ниже, если нажать кнопку Добавить, строки добавляются, но во втором значения не связываются в выпадающем списке

Есть идеи? Заранее спасибо.

1 ответ

Найти пользовательские элементы управления по идентификатору, который вы дали, а затем вы можете найти DropDownList внутри пользовательского контроля.

protected void BindActivities()
{
    foreach (string controlName in NoOfControls)
    {
        TimesheetUserControl  userControl = Timesheet.FindControl(controlName) as TimesheetUserControl;
        if(userControl == null) return;
        DropDownList dropActivities = userControl.FindControl("DropDownActivities") as DropDownList;
        if(dropActivities == null) return;
        DbConnection.Open();
        OleDbCommand cmd1 = new OleDbCommand("select designation from emp_master where username = '" + username + "'", DbConnection);
        OleDbDataAdapter da = new OleDbDataAdapter(Deptcmd);
        DataSet ds = new DataSet();
        da.Fill(ds);
        // DbConnection.Close();
        dropActivities.DataSource = ds;
        dropActivities.DataTextField = "ActivityName";
        dropActivities.DataBind();
        dropActivities.Items.Insert(0, new ListItem("--Select--", "0"));
    }
}
Другие вопросы по тегам