C# 未设置DropDownList所选值

C# 未设置DropDownList所选值,c#,asp.net,C#,Asp.net,我使用两个下拉菜单来选择月份和年份,我制作了一个用户控件,我将这个控件放在一个中继器控件中。 我必须在其中显示从数据库中选择的值。例如,如果数据库中的日期为2014年5月,则应显示5月份月份的下拉列表和2014年的下拉列表。 我正在RowDatabound事件中执行此操作,但未选中它。 我就是这样做的 var txtFrom = e.Item.FindControl("txfrom") as TextBox;//I will have values in mm/yyy var datefrom

我使用两个下拉菜单来选择月份和年份,我制作了一个用户控件,我将这个控件放在一个中继器控件中。 我必须在其中显示从数据库中选择的值。例如,如果数据库中的日期为2014年5月,则应显示5月份月份的下拉列表和2014年的下拉列表。 我正在RowDatabound事件中执行此操作,但未选中它。 我就是这样做的

var txtFrom = e.Item.FindControl("txfrom") as TextBox;//I will have values in mm/yyy
var datefrom = e.Item.FindControl("ddempfrom") as CutomControls.MonthYearPicker;
var monthfrom = datefrom1.FindControl("ddmonth") as DropDownList;
var yearfrom = datefrom1.FindControl("ddyear") as DropDownList;

monthfrom.SelectedValue=txtFrom.Text.Split('/')[0];
yearfrom .SelectedValue=txtFrom.Text.Split('/')[1];
这就是我在UserControl中制作下拉列表的方式

private void LoadMonthYear()
{
    for (int i = 1; i <= 12; i++)
    {
        DateTime date = new DateTime(1900, i, 1);
        ddmonth.Items.Add(new System.Web.UI.WebControls.ListItem(date.ToString("MMMM"), i.ToString()));
    }

    var currentYear = DateTime.Now;
    for (int i = 1900; i <= Convert.ToInt32(currentYear.ToString("yyyy")); i++)
    {
        ddyear.Items.Add(new System.Web.UI.WebControls.ListItem(i.ToString(), i.ToString()));
    }   
}

protected void Page_Load(object sender, EventArgs e)
{
    if (!Page.IsPostBack)
    LoadMonthYear();
}
private void LoadMonthYear()
{

对于(inti=1;i,例如,当您在用户控件的下拉列表中放置OnDataBinding事件处理程序时

<asp:DropDownList ID="ddlMonth" runat="server" OnDataBinding="ddlMonth_DataBinding">
</asp:DropDownList>

<asp:DropDownList ID="ddyear" runat="server" OnDataBinding="ddlYear_DataBinding">
</asp:DropDownList>

然后在用户控件的代码隐藏中生成事件处理程序

protected void ddlMonth_DataBinding(object sender, System.EventArgs e)
{
    DropDownList ddl = (DropDownList)(sender);
    for (int i = 1; i <= 12; i++)
        {
            DateTime date = new DateTime(1900, i, 1);
            ddl.Items.Add(newSystem.Web.UI.WebControls.ListItem(date.ToString("MMMM"), i.ToString()));
        }
}

protected void ddlYear_DataBinding(object sender, System.EventArgs e)
{
    DropDownList ddl = (DropDownList)(sender);
    var currentYear = DateTime.Now;
    for (int i = 1900; i <= Convert.ToInt32(currentYear.ToString("yyyy")); i++)
    {
        ddl.Items.Add(new System.Web.UI.WebControls.ListItem(i.ToString(), i.ToString()));
    }   
}
protected void ddlu\u数据绑定(对象发送方,System.EventArgs e)
{
DropDownList ddl=(DropDownList)(发送方);

对于(int i=1;我猜您正在尝试在触发usercontrol中的
Page\u Load
之前在下拉列表中选择值,因此此时没有可选择的项。请尝试将调用移动到
LoadMonthYear()
进入您的
页面\u Init
而不是此处的打字错误:
var txtFrom=e.Item.FindControl(“txfrom”)作为文本框;
。您使用了txfrom而不是txtFrom。我会尝试从中继器的ItemDataBound处理程序中触发LoadMonthYear()。例如,var monthfrom=datefrom1.FindControl(“ddmonth”)作为DropDownList;monthfrom.LoadMonths()@Matthijs-its-txfrom-onrepeater@freefaller让我试试这将由我的用户控制?
protected void ddlMonth_DataBinding(object sender, System.EventArgs e)
{
    DropDownList ddl = (DropDownList)(sender);
    for (int i = 1; i <= 12; i++)
        {
            DateTime date = new DateTime(1900, i, 1);
            ddl.Items.Add(newSystem.Web.UI.WebControls.ListItem(date.ToString("MMMM"), i.ToString()));
        }
}

protected void ddlYear_DataBinding(object sender, System.EventArgs e)
{
    DropDownList ddl = (DropDownList)(sender);
    var currentYear = DateTime.Now;
    for (int i = 1900; i <= Convert.ToInt32(currentYear.ToString("yyyy")); i++)
    {
        ddl.Items.Add(new System.Web.UI.WebControls.ListItem(i.ToString(), i.ToString()));
    }   
}