1.ToString()的问题
    从DataSet中取得值明明是string类型的,为什么还要用ToString()去转换呢?//应该是ds.Tables[0].Rows[0]["Hos_State"].ToString
if (ds.Tables[0].Rows[0]["Hos_State"] == "正常" || ds.Tables[0].Rows[0]["Hos_State"] == "暂停")
            {
                btnclose.Enabled = true;
                btnstart.Enabled = false;
            }
            else if (ds.Tables[0].Rows[0]["Hos_State"]== "冻结")
            {
                btnstart.Enabled = true;
                btnclose.Enabled = false;
            }
            else
            {
                app.Alert(this, "出错了!");
                dd1hos.SelectedIndex = 0;
            }没用ToString()去转换,然后弹出“出错了!”提示。我想问到底为什么要用ToString,存进去的也是string类型啊?晕了2."DropDownList1.SelectedIndex=2;"这样的语句是不是不能出发:SelectedIndexChanded事件啊?判详细解答,谢谢

解决方案 »

  1.   

    1、string存到dataset的时候进行了装箱操作,变成了object类型,取出来要转换。如果使用了强类型dataset,可以直接显式转换(string)2、不可以吧
      

  2.   

    1 因为它是object
    2 可以吧 BS记不清了 反正CS可以。。
      

  3.   

    1.第一个你取出来的都是对象类型,即使你库中的是string,必须经过转化
    2.会触发,因为他的事件激发设置是他的选项改变!
    希望对你有用!
      

  4.   

    从object到string 需要进行转换
      

  5.   

    前面的都回答了.....    
    第2个问题是可以得....  你自己做个测试就知道了
    你得把AutoPostBack设置为true
    因为你在更改DropDownList的SelectedIndex时候 页面没有回发.
    所以服务器不知道 它的项目有所更改...那么当然无法触发事件了....
      

  6.   

    string存到dataset的时候没有进行装箱操作,楼主不要误会。object.ToString的实现如下:public virtual string ToString(){
        return this.GetType().ToString();
    }
      

  7.   

    1:什么类型的数据存回数据库都为被转换为object,取出来肯定得做相应的转换
    2:B/S中DropDownList的SelectedIndexChanded必需设置AutoPostBack为true,才能触发
      

  8.   

    我试了一下,发现不可以。我的AutoPostBack设置的就是True。
    能给我段你测试的代码吗?我的代码好像也没有错误啊
      

  9.   

    object类型
    if (ds.Tables[0].Rows[0]["Hos_State"].ToString().Equals("正常"))
     {}
    SelectedIndexChanged  在当列表控件的选定项在信息发往服务器之间变化时发生。
      

  10.   


    protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {       
                DropDownList1.SelectedIndex = 0;
            }
        } protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
        {
            Response.Write("123");
        }
    LZ难道不行?
      

  11.   

    我错了平常值类型转object说装箱习惯了,顺手就打出来了 - -
    虽然string的用法很像值类型,但还是引用类型,这个不是装箱操作。不过10楼给的实现是object.ToString()的实现是默认的实现,返回object的类型名称,一般是没什么意义的。
    事实上这个object.ToString()在很多类型里都被重写(overried)了,比如            object i = 12345;
                Console.WriteLine(i.ToString()); //输出12345
                Console.WriteLine(i.GetType().ToString()); //输出System.Int32
      

  12.   

    楼主的意思应该是问代码里改变DropDownList1.SelectedIndex值,会不会引发SelectedIndexChanged事件
      

  13.   


    我是这个意思protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                btnstart.Visible = false;  //初始化按钮状态
                btnclose.Visible = false;
                btnclose.Enabled = false;
                btnstart.Enabled = false;
                string sql = "select Hos_Name,Hos_ID from T_GH_Hospital";
                dd1hos.DataSource = app.ExecuteDataSet(sql);
                dd1hos.DataTextField = "Hos_Name";
                dd1hos.DataValueField = "Hos_ID";
                dd1hos.DataBind();
                dd1hos.Items.Insert(0,new ListItem("-请选择-",""));
                dd1hos.SelectedIndex = 0;
            }
        }
        protected void dd1hos_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (dd1hos.SelectedItem.Text.ToString() == "-请选择-")
            {
                btnstart.Visible = false;  //设置按钮状态
                btnclose.Visible = false;
                btnclose.Enabled = false;
                btnstart.Enabled = false;
            }
            else
            {
                btnstart.Visible = true;
                btnclose.Visible = true;            string sql = "select * from T_GH_Hospital where Hos_ID = "+Convert.ToInt32(dd1hos.SelectedValue);
                DataSet ds = new DataSet();
                ds = app.ExecuteDataSet(sql);            if (ds.Tables[0].Rows[0]["Hos_State"].ToString() == "正常" || ds.Tables[0].Rows[0]["Hos_State"].ToString() == "暂停")
                {
                    btnclose.Enabled = true;
                    btnstart.Enabled = false;
                }
                else if (ds.Tables[0].Rows[0]["Hos_State"].ToString() == "冻结")
                {
                    btnstart.Enabled = true;
                    btnclose.Enabled = false;
                }
                else
                {
                    app.Alert(this, "出错了!");
                    dd1hos.SelectedIndex = 0;  //如果我不加下面四句话,那么不会进入“-请选择-”的那个 设置按钮状态 语句的
                    btnstart.Visible = false;
                    btnclose.Visible = false;
             btnclose.Enabled = false;
             btnstart.Enabled = false; 
                }
            }
        }
      

  14.   

    最下面那个注释的地方,并没有触发dd1hos_SelectedIndexChanged事件