继承DropDownList控件,如何实现SelectedIndex的默认值为-1,即当控件初化时让DropDownList控件不选择任何项。  将DropDownList在客户端生成的select中的selectedIndex设成-1,当页面向服务器提交时,怎样才能在服务器端得到传上来的selectedIndex值?请高手指教。

解决方案 »

  1.   

    DropDownList绑定完数据后,再加一行; Text: ""    Value=-1
    再设DropDownList.SelectIndex=0;
      

  2.   

    感谢上面这位大哥的回复,但我不是想实现这种功能。
    DropDownList(id=DropDownList1)在客户端生成的select可以通过  document.all['DropDownList1'].selectedIndex=-1 设置select 未选定任何一项,我的目的就是实现:我在服务器端通过设置属性SelectedIndex=-1也可以实现未选定任何一项的效果。我想通过继承DropDownList来实现,但是如何才能获取到从客户端的select传过的selectedIndex值呢?还有AutoPostBack=false, 我从DropDownList下拉框中选择一项,然后通一个按钮来进行提交获的DropDownList控件的SelectedIndex值,这时该控件的SelectedIndex是如何传到服务器端的?
      

  3.   

    第一,你说的"让DropDownList控件不选择任何项"是不可能实现的,WEB的控件里面实现不了,但是你可以在DropDownList的数据源里面做文章(就像2楼说的),
    第二,你可以把DropDownList控件的SelectedIndex值传给一个隐藏控件,然后SUBMIT一下,就可以得到了.
      

  4.   

    /// <summary>
    /// DropDownListE 的摘要说明。
    /// </summary>
    [
    DefaultProperty("Text"), 
    ToolboxData("<{0}:DropDownListE runat=server></{0}:DropDownListE>")]
    public class DropDownListE : System.Web.UI.WebControls.Panel
    {
    public  TextBox _txtBox ;
    public  DropDownList _dropDownList ;

    public DropDownListE():base()
    {

    this.Height=22;
    _txtBox =new TextBox();

    _dropDownList=new DropDownList();
    this.Controls.Add(_txtBox);

    this.Controls.Add(_dropDownList);
    // _dropDownList.Items.Add(new ListItem("北京","北京"));
    // _dropDownList.Items.Add(new ListItem("六","六"));
    } // private string text;

    [Bindable(true), 
    Category("Appearance"), 
    DefaultValue("")] 
    public string Text 
    {
    get
    {
    return _txtBox.Text;
    }

    set
    {
    _txtBox.Text = value;
    }
    }
    protected override void CreateChildControls()
    {
    base.CreateChildControls ();
    //Controls.Add(new LiteralControl("<td></td>")); } /// <summary> 
    /// 将此控件呈现给指定的输出参数。
    /// </summary>
    /// <param name="output"> 要写出到的 HTML 编写器 </param>
    protected override void Render(HtmlTextWriter output)
    {



    //***********发送 客户端javascript 事件响应代码 start****************
    _dropDownList.Width=this.Width;
    output.RenderBeginTag(HtmlTextWriterTag.Script);
    // output.AddStyleAttribute("language","javascript");
    output.Write(@"var texBoxText='';function textBox_onkeyup(txtObject){                      var i=0; var ddlObject='"+_dropDownList.ClientID.ToString()+@"';var j=0; var selectdll=  document.all[ddlObject]; j=selectdll.length;
         
                         if(event.keyCode==127 || event.keyCode==8)
    {  var falg=false;
                             for(i;i<j;i=i+1)  { var txt=selectdll.options[i].value;
     if(txt==txtObject.value)
    {  
    txtObject.value=txt;selectdll.options[i].selected =true;
                                     falg=true;
    break;
    }
      } 
                              if(!falg){selectdll.selectedIndex=-1;}
                             
    }
    else if(texBoxText!=txtObject.value)
    {
    for(i;i<j;i=i+1) 
    { var txt=selectdll.options[i].value;
    if(txt.indexOf(txtObject.value)==0)
    {  
    txtObject.value=txt;selectdll.options[i].selected =true;
    break;
    }

    }
                            texBoxText=txtObject.value;
                        // (document.all['text11']).value=selectdll.selectedIndex+selectdll.value;
    }
                        ");
    output.RenderEndTag();
            

                //***********发送 客户端javascript 事件响应代码 end**************** //***********发送 TextBox控件在客户端的显示属性,CSS start *****************
    _txtBox.Width=Unit.Parse(Convert.ToString((_dropDownList.Width.Value-17)));
    _txtBox.Height=_dropDownList.Height;
         _txtBox.ID="_txtBox";
    _txtBox.Text=_dropDownList.SelectedItem.Value;

    _txtBox.Style.Add( "POSITION" ,"absolute");
    _txtBox.Attributes.Add("onkeyup",string.Format("textBox_onkeyup(this);"));
                 
    //***********发送 TextBox控件在客户端的显示属性,CSS end *****************
    //_txtBox.RenderControl(output); //*************下拉控件相关Css、事件 start************
    _dropDownList.Style.Add("VISIBILITY","visible");
    _dropDownList.Style.Add("POSITION","absolute");
    _dropDownList.Attributes.Add("onchange","var txtBox=document.all['"+_txtBox.ClientID+"'];txtBox.value=(document.all['"+_dropDownList.ClientID+"']).value;");

       
    _dropDownList.Style.Add("CLIP",string.Format("rect(0px {0}px 80px {1}px)",Convert.ToInt32(_dropDownList.Width.Value),Convert.ToInt32(_dropDownList.Width.Value-18)));
    //*************下拉控件相关Css、事件end ************
       //_dropDownList.RenderControl(output); base.Render(output);

    }
    }
    ***************************************************
    大家请看一下这段代码,我实例化后想通过按钮来进行提交得到TextBox 控件中的Text,但我发现这样跟本得不到,但通过DropDownListE  控件的下拉选择后再进行按钮来进行提交 DropDownList控件的信息却能够得,请问这种情况如何进行解觉啊?照理说我通过this.Controls.Add(_txtBox);  this.Controls.Add(_dropDownList);自定义控件DropDownListE里的TextBox 和DropDownList的  ViewState值应该能够回传到服务的。但事实上TextBox 回传不了,而DropDownList却可以。