1

ユーザーコントロールドロップダウンリストの値をバインドします

しかし、ユーザーコントロール行を追加すると、時間値がドロップダウンリストにバインドされません

コード:

.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);

    }

下の画像では、追加ボタンをクリックすると行が追加されますが、2番目の値はドロップダウンリストにバインドされていません

ここに画像の説明を入力

何か案は?前もって感謝します。

4

1 に答える 1