问题是这样的,我之前用三个下拉框像数据库里面的一个时间类型的字段插入了选择的时间,问题是我现在有个修改页面,我现在可以读出数据库的时间,可是我修改时间是,点击下拉框后总是还原成默认的时候的值,也就是2001-1-1。具体代码如下,请大侠们帮忙看看,在线等。public partial class Admin_EditNews : System.Web.UI.Page
{
    Db pn163 = new Db();
    protected void Page_Load(object sender, EventArgs e)
    {        DropDownList1.Items.Clear();        for (int i = 2000; i <= Convert.ToInt32(DateTime.Now.Year.ToString()); i++)
        {
            DropDownList1.Items.Add(new ListItem(i.ToString(), i.ToString()));
        }        DropDownList2.Items.Clear();        for (int i = 1; i <= 12; i++)
        {
            DropDownList2.Items.Add(new ListItem(i.ToString(), i.ToString()));
        }        if (Session["Admin"] == null)
        {
            Response.Redirect("./Login.Aspx");
        }
        SqlConnection Conn = new SqlConnection(pn163.strConn);        Conn.Open();        SqlCommand Cmd = new SqlCommand("select * from NewView where id ="
    + Request.QueryString["id"], Conn);        if (!IsPostBack)
        {
            SqlDataReader Dr = Cmd.ExecuteReader();
       DateTime time=DateTime.Now;
            if (Dr.Read())
            {
                 time = Convert.ToDateTime(Dr["NewTime"].ToString());//数据库取出时间值
            }
            time.ToShortDateString();
            DropDownList1.SelectedIndex = -1;
            DropDownList1.Items.FindByValue(time.Year.ToString()).Selected = true;
            DropDownList1_SelectedIndexChanged(sender, e);
            DropDownList2.SelectedIndex = -1;
            DropDownList2.Items.FindByValue(time.Month.ToString()).Selected = true;
            DropDownList3.SelectedIndex = -1;
            DropDownList3.Items.FindByValue(time.Day.ToString()).Selected = true;
        
        }  
    }
    void BindData()
    {
        DropDownList3.Items.Clear();        DateTime datetime = new DateTime(Convert.ToInt32(DropDownList1.SelectedValue), Convert.ToInt32(DropDownList2.SelectedValue), 1).AddMonths(1).AddDays(-1); //取当前月的最后一天        for (int i = 1; i <= datetime.Day; i++)
        {
            DropDownList3.Items.Add(new ListItem(i.ToString(), i.ToString()));
        }
    
    }
    protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
    {
        DropDownList2.SelectedIndex = 0;        BindData();
    }
    protected void DropDownList2_SelectedIndexChanged(object sender, EventArgs e)
    {
        BindData();
    }
    
    protected void Button1_Click(object sender, EventArgs e)
    {
       DateTime datetime = new DateTime(Convert.ToInt32(DropDownList1.SelectedValue), Convert.ToInt32(DropDownList2.SelectedValue), Convert.ToInt32(DropDownList3.SelectedValue)); 
        SqlConnection Conn = new SqlConnection(pn163.strConn);        Conn.Open();        SqlCommand Cmd = new SqlCommand("update NewView set NewTime='" + datetime + "' where id="
            +Request.QueryString["id"],Conn);        Cmd.ExecuteNonQuery();        Response.Redirect("./AdminNews.aspx");        Conn.Close();
    }
}

解决方案 »

  1.   

    if (!IsPostBack)
    以外最好 不要写任何代码,想办法重新组织一下
      

  2.   

    DropDownList1.Items.Clear();  for (int i = 2000; i <= Convert.ToInt32(DateTime.Now.Year.ToString()); i++)
      {
      DropDownList1.Items.Add(new ListItem(i.ToString(), i.ToString()));
      }
    把这个和DropDownList2的放到if(!IsPostBack)里试试
      

  3.   

    你的page_Load 里边的代码有问题,每次回调服务器都会先执行这段代码的:
    DropDownList1.Items.Clear();  for (int i = 2000; i <= Convert.ToInt32(DateTime.Now.Year.ToString()); i++)
      {
      DropDownList1.Items.Add(new ListItem(i.ToString(), i.ToString()));
      }  DropDownList2.Items.Clear();  for (int i = 1; i <= 12; i++)
      {
      DropDownList2.Items.Add(new ListItem(i.ToString(), i.ToString()));
      }  if (Session["Admin"] == null)
      {
      Response.Redirect("./Login.Aspx");
      }
      SqlConnection Conn = new SqlConnection(pn163.strConn);  Conn.Open();  SqlCommand Cmd = new SqlCommand("select * from NewView where id ="
      + Request.QueryString["id"], Conn);你说你能不出错嘛!