那是因为你修改新闻后,页面刷新了,导致下拉框回位了,
要实现你的目的:只要在刷新后重新指定下拉框的显示value
如:ddClass.SelectedValue="新闻"

解决方案 »

  1.   

    private void Page_Load(object sender, System.EventArgs e) 

    // 在此处放置用户代码以初始化页面 string newsId=Request.QueryString["newsId"]; 
    string sql="select news.*,newsClass.* from news,newsClass where news.classId=newsClass.classId and newsId='"+newsId+"'"; 
    procNews.sqlexe(sql); 
    SqlCommand cmd=new SqlCommand(sql,procNews.cn); 
    SqlDataReader read=cmd.ExecuteReader(); 
    if(read.Read())  把if 换成while试试

    tbNewsId.Text=newsId; 
    tbNewsTitle.Text=read["newsTitle"].ToString(); 
    tbNewsFrom.Text=read["newsFrom"].ToString(); 
    tbNewsAuthar.Text=read["newsAuthar"].ToString(); 
    tbNewsConntent.Text=read["newsContent"].ToString(); 

    ddClass.DataSource=read; 
    ddClass.DataTextField="className"; 
    ddClass.DataValueField="classId"; 
    ddClass.DataBind(); }强烈建议楼主单步调试
      

  2.   

    换成while还是不可以啊!请大家帮忙啊 !~5555
      

  3.   

    晕,没看清题意,嘎嘎这个你把代码放在
    if(!Page.Postback)
    {
    string newsId=Request.QueryString["newsId"]; 
    string sql="select news.*,newsClass.* from news,newsClass where news.classId=newsClass.classId and newsId='"+newsId+"'"; 
    procNews.sqlexe(sql); 
    SqlCommand cmd=new SqlCommand(sql,procNews.cn); 
    SqlDataReader read=cmd.ExecuteReader(); 
    if(read.Read()) 

    tbNewsId.Text=newsId; 
    tbNewsTitle.Text=read["newsTitle"].ToString(); 
    tbNewsFrom.Text=read["newsFrom"].ToString(); 
    tbNewsAuthar.Text=read["newsAuthar"].ToString(); 
    tbNewsConntent.Text=read["newsContent"].ToString(); 

    ddClass.DataSource=read; 
    ddClass.DataTextField="className"; 
    ddClass.DataValueField="classId"; 
    ddClass.DataBind(); }
    里面就Ok了
      

  4.   

    是这么写吗?
    if(!Page.IsPostBack)
    { string newsId=Request.QueryString["newsId"];
    string sql="select news.*,newsClass.* from news,newsClass where news.classId=newsClass.classId and newsId='"+newsId+"'";
    procNews.sqlexe(sql);
    SqlCommand cmd=new SqlCommand(sql,procNews.cn);
    SqlDataReader read=cmd.ExecuteReader();
    if(read.Read())
    {
    tbNewsId.Text=newsId;
    tbNewsTitle.Text=read["newsTitle"].ToString();
    tbNewsFrom.Text=read["newsFrom"].ToString();
    tbNewsAuthar.Text=read["newsAuthar"].ToString();
    tbNewsConntent.Text=read["newsContent"].ToString();
    }
    ddClass.DataSource=read;
    ddClass.DataTextField="className";
    ddClass.DataValueField="classId";
    ddClass.DataBind();
    }
      

  5.   

    不是的 这个页面是从另外一个页面过来的,比如说是:updateNews.aspx?newsId=1,在updateNews.aspx这个页面接新闻的ID,将以前新闻的内容查询出来,其他的标题等都好查询,就是新闻类别无法查询出来.这个新闻类别的第一个值必须是我以前新闻的类别!
      

  6.   

    干脆点直接用Session保存上一个新闻类别得了,这个肯定没问题,不管是不是同一个页面
      

  7.   

    把下拉列表的AUTOPOSTBACK属性设置为“TRUE”。
      

  8.   

    还是不行的,除了session还有别的办法吗?
      

  9.   

    if(!IsPostBack) 
    {
    string newsId=Request.QueryString["newsId"]; 
    string sql="select news.*,newsClass.* from news,newsClass where news.classId=newsClass.classId and newsId='"+newsId+"'"; 
    procNews.sqlexe(sql); 
    SqlCommand cmd=new SqlCommand(sql,procNews.cn); 
    SqlDataReader read=cmd.ExecuteReader(); 
    if(read.Read()) 

    tbNewsId.Text=newsId; 
    tbNewsTitle.Text=read["newsTitle"].ToString(); 
    tbNewsFrom.Text=read["newsFrom"].ToString(); 
    tbNewsAuthar.Text=read["newsAuthar"].ToString(); 
    tbNewsConntent.Text=read["newsContent"].ToString(); 

    ddClass.DataSource=read; 
    ddClass.DataTextField="className"; 
    ddClass.DataValueField="classId"; 
    ddClass.DataBind(); ddClass.Items.FindByValue(newsId.ToString()).Selected=true;
    }
      

  10.   

    知道lz的意思,就是根据一个id显示与它相关的内容,最主要的一个功能就是类别可以重新选择,但首选项是以前的类别。
    可以这样做:
        写一个函数,返回一个datatable,然后在html中帮定到dropdownlist中,<%# 函数名%>,然后再在pageload中和其他控件一样进行绑定,如dropdownlist.select。
      

  11.   

    string sql="select news.*,newsClass.* from news,newsClass where news.classId=newsClass.classId and newsId='"+newsId+"'"; 
    为什么不用连接查询
    http://txhelp.net
      

  12.   

    不好意思啊,现在在办公室,这里没有编程软件和代码,如果晚上回去之前lz没有结贴的话给lz一个例子
      

  13.   

    嗯~~~~~有点看明白了,你是不是在修改新闻时,显示新闻的具体信息,同时这个下拉列表框被选中的项应该是这个新闻的类别。对巴?
    说说我的思路首先,应该在Page_Load函数里
    if(Page.IsPostBack)
    {
       这里给下拉列表框绑定值,绑定你的所有的新闻类别,
    }
    然后,其他的我就你这个喽
    string newsId=Request.QueryString["newsId"];
    string sql="select news.*,newsClass.* from news,newsClass where news.classId=newsClass.classId and newsId='"+newsId+"'";
    procNews.sqlexe(sql);
    SqlCommand cmd=new SqlCommand(sql,procNews.cn);
    SqlDataReader read=cmd.ExecuteReader();
    if(read.Read())
    {
    tbNewsId.Text=newsId;
    tbNewsTitle.Text=read["newsTitle"].ToString();
    tbNewsFrom.Text=read["newsFrom"].ToString();
    tbNewsAuthar.Text=read["newsAuthar"].ToString();
    tbNewsConntent.Text=read["newsContent"].ToString(); ddClass.SelectedValue=新闻类型那个数据字段;这样就选出来了,SqlDataReader 一次只能读一条记录,修改页面的话,适用下拉列表框里面一般都是放很多项提供选择。你这样绑定下拉列表框就被绑定成一项,如果用户要修改新闻类型就没有选择的余地了
      

  14.   


    看22楼红字地方用ddClass.SelectedValue设置这个属性
      

  15.   


    using System;
    using System.Collections;
    using System.Configuration;
    using System.Data;
    using System.Linq;
    using System.Web;
    using System.Web.Security;
    using System.Web.UI;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls;
    using System.Web.UI.WebControls.WebParts;
    using System.Xml.Linq;
    using System.Data.SqlClient;public partial class Default4 : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                using (SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["AdventureWorksConnectionString"].ConnectionString))
                {
                    SqlDataAdapter sda = new SqlDataAdapter("select AddressID,AddressLine1 from Person.Address", conn);
                    DataSet ds=new DataSet();
                    sda.Fill(ds);
                    DropDownList1.DataSource=ds.Tables[0].DefaultView;
                    DropDownList1.DataTextField="AddressLine1";
                    DropDownList1.DataValueField = "AddressID";
                    DropDownList1.DataBind();
                }
            }
        }
        protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
        {
            Response.Write("dropdownlist 的Value:" + DropDownList1.SelectedValue + "<br/>Dropdownlist的Text:" + DropDownList1.SelectedItem.Text);
        }
    }VS2005+sql2005下面测试通过,数据库使用的是sql2005自带的AdventureWorks
      

  16.   

    private void Page_Load(object sender, System.EventArgs e) 

    // 在此处放置用户代码以初始化页面 
    if(!IsPostBack)
    {
    string sqltxt="select className,classId from newsClass ";
    procNews.sqlexe(sqltxt); 
    SqlCommand cmd=new SqlCommand(sql,procNews.cn); 
    SqlDataAdapter sqlada=new SqlDataAdapter(cmd);
    DataSet ds=new DataSet();
    sqlada.Fill(ds);
    ddClass.DataSource=ds; 
    ddClass.DataTextField="className"; 
    ddClass.DataValueField="classId"; 
    ddClass.DataBind(); 
    }
    string newsId=Request.QueryString["newsId"]; 
    string sql="select * from news where newsId='"+newsId+"'"; 
    procNews.sqlexe(sql); 
    SqlCommand cmd=new SqlCommand(sql,procNews.cn); 
    SqlDataReader read=cmd.ExecuteReader(); 
    if(read.Read()) 

    tbNewsId.Text=newsId; 
    tbNewsTitle.Text=read["newsTitle"].ToString(); 
    tbNewsFrom.Text=read["newsFrom"].ToString(); 
    tbNewsAuthar.Text=read["newsAuthar"].ToString(); 
    tbNewsConntent.Text=read["newsContent"].ToString(); 
    ddClass.SelectedValue=read["classId "].ToString();

    read.Close();}
      

  17.   

    把下拉列表的AUTOPOSTBACK属性设置为“TRUE”。
      

  18.   

    把下拉列表的AUTOPOSTBACK属性设置为“TRUE”。 第一次加载的时候设置dropdownlist的选中值
      这个值是read 中的新闻类别的值
      

  19.   

    if(!Page.IsPostBack) 

    }
    把下拉列表的AUTOPOSTBACK属性设置为“TRUE”。 
      

  20.   

    在ISPostBack中绑定列表,然后根据新闻ID找到对应的类别ID,在绑定后设定Selected为对应的类别ID就ok了