C# 如何在usercontrol dropdownlist中绑定值?

C# 如何在usercontrol dropdownlist中绑定值?,c#,asp.net,drop-down-menu,user-controls,loadviewstate,C#,Asp.net,Drop Down Menu,User Controls,Loadviewstate,我绑定usercontrol dropdownlist中的值 但当我添加usercontrol行时,时间值不会绑定到dropdownlist中 代码: .ascx .aspx .aspx.cs protected void Page_Load(object sender, EventArgs e) { if(!IsPostback) { BindActivities(); } } protected v

我绑定usercontrol dropdownlist中的值

但当我添加usercontrol行时,时间值不会绑定到dropdownlist中

代码:

.ascx


.aspx


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

    }
受保护的无效页面加载(对象发送方,事件参数e)
{
如果(!IsPostback)
{
绑定活动();
}
}
受保护的活动()
{
DropDownList dropActivities=时间表。FindControl(“DropDownActivities”)作为DropDownList;
DbConnection.Open();
OleDbCommand cmd1=新的OleDbCommand(“从emp_主机中选择名称,其中username='“+username+'”,DbConnection);
OleDbDataAdapter da=新的OleDbDataAdapter(Deptcmd);
数据集ds=新数据集();
da.填充(ds);
//DbConnection.Close();
dropActivities.DataSource=ds;
dropActivities.DataTextField=“ActivityName”;
dropActivities.DataBind();
插入(0,newlistItem(“--Select--”,0”);
}
公共列表NoOfControls
{
得到
{
返回ViewState[“NoOfControls”]==null?新建列表():(列表)ViewState[“NoOfControls”];
}
设置
{
ViewState[“NoOfControls”]=值;
}
}
受保护的覆盖无效LoadViewState(对象保存状态)
{
base.LoadViewState(savedState);
如果(iPostBack)
{
生成控件();
}
}
私有void GenerateControls()
{
foreach(NoOfControls中的字符串i)
{
TimesheetUserControl ctrl=(TimesheetUserControl)Page.LoadControl(“TimesheetUserControl.ascx”);
ctrl.ID=i;
this.rpt1.Controls.Add(ctrl);
}
}
受保护的无效按钮单击(对象发送者,事件参数e)
{
按钮thisButton=(按钮)发送器;
列表温度=空;
var uc=(TimesheetUserControl)this.LoadControl(@“TimesheetUserControl.ascx”);
字符串id=Guid.NewGuid().ToString();
uc.ID=ID;
温度=无控制;
临时添加(id);
NoOfControls=温度;
rpt1.控件.添加(uc);
}
在下图中,如果单击“添加”按钮,则会添加行,但第二个值不会绑定到dropdownlist中


有什么想法吗?提前感谢。

根据您提供的id查找用户控件,然后您可以在用户控件内找到
下拉列表

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"));
    }
}

根据您给定的id查找用户控件,然后可以在usercontrol中找到
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"));
    }
}

值在dropdownlist中绑定,但当我单击“添加新行”按钮时,行被添加,但在dropdownlist中值未绑定,请参见图像添加新用户控件时,需要重新绑定数据集。dropActivities.DataSource=ds;只有在未回发时才执行此操作。值在dropdownlist中绑定,但当我单击“添加新行”按钮时,行被添加,但在dropdownlist中值未绑定,请参见图像添加新用户控件时,需要重新绑定数据集。dropActivities.DataSource=ds;只有在未回发时才可以执行此操作。
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"));
    }
}