从数据库读取字段到GridView里
在一个名为Status的列里
存放着1,2,3这3种状态
在页面绑定的时候放到HTML的下拉列表里.代码如下:
<ItemTemplate>
<select id='select<%# Eval("Status_ID") %>'>
    <option value='1'>上线</option>
    <option value='3'>未知</option>
    <option value='2'>下线</option>
</select>
</ItemTemplate>
如果绑定的时候<%# Eval("Status") %>为3
那么"未知"就默认为选中状态
这样该如何实现?

解决方案 »

  1.   

    用listbox控件吧 
    SelectedValue属性可以设置默认选中状态
      

  2.   

    嗯.明白.还有其他可以实现同样结果的方法.比如在行绑定事件里设置服务器端控件的默认值不过现在重点是如何解决上述问题.select是客户端的
      

  3.   

    如果是dropDownList或是 select 但runat=server那都很好办.
    如果不是,那么,但itemtemplate里要进行一些变动,需要有地方记录当前的select的文本值<ItemTemplate> 
    <select   id='select_<%#Eval("Status_ID")%>'> 
            <option   value='1'> 上线 </option> 
            <option   value='3'> 未知 </option> 
            <option   value='2'> 下线 </option> 
    </select><input type="hidden" id="txt_<%#Eval("Status_ID")%>" value="<%#Eval("Status")%>" />
    <!--我用了input,你也可以用div,span等等,用style=display:none将其隐含,并且将 status的文本写到它里面,js通过innerTEXT来取.无论用什么,注意的只是要命名匹配-->
    </ItemTemplate> 
    可以使用js来实现
    <script>
    function test()
    {
            var selectS = document.getElementsByTagName("SELECT");
            for(var i=0;i<=selectS.length;i++)//或者用foreach
            {
                var sid = selectS[i].id;
                if(sid....//用正则匹配是否符合 select_数字这样的规则,如果是,说明是你的itemTemplate时的select否则, 是别处的)
                {
                    selectS[i].value = document.getElementById(sid.replace('select','txt')).value; //将对应的文本框的值设置为select 的选中值.
                 }
                
            }
    }
    </script>
    <body onload="test()">也可以用笨办法:<select ....>
      <option value="1" <%if(Eval("Status_ID")=="1")Response.write("selected")%>>xxx</option>
      <option value="2" <%if(Eval("Status_ID")=="2")Response.write("selected")%>>yyy</option>
    ....随手敲的,可能手误
      

  4.   

    @fcuandy
    你是优秀的.准备尝试第2种写法.
    第3中写法好像有点语法错误呵呵.先尝试一下!
    一会给回复!
      

  5.   

    <body onload="test()">
    第2个办法目前可能不能用了.因为GridView是嵌在UpdatePanel里无刷新页面的.因此不会触发test()事件尝试最下面种方法也就是Response.Write提示异常:
    Eval()、XPath() 和 Bind() 这类数据绑定方法只能在数据绑定控件的上下文中使用。 
      

  6.   

    其实我写的是两种方法.一种是笨办法,一种是js方法.笨办法里确实有语法错误, 只是为了说明一下意思.第一种方法, 不一定是在 body的onload事件时触发. 也可以在其它时候触发. 比如你的 updatepanel 里加载数据完后,或某个操作完毕后, 执行一下 test方法就可以了. updaztepanel我没用过,这个可能你要修改它内部实现的js部分. 或者页面注册一段解本来执行 test方法.
      

  7.   

    除了上面您写的那种方式我还尝试:<% Response.Write("<select id='select" + Eval("JOB_ID") + "'>");
    if (Eval("chkOnLine").ToString() == "1") 

       Response.Write("<option value='1' selected>上线</option>"); 
    }
    if (Eval("chkOnLine").ToString() == "2")
    {
       Response.Write("<option value='2' selected>未知</option>");
    }
    Response.Write("</select>");
    %>也提示
    Eval()、XPath()   和   Bind()   这类数据绑定方法只能在数据绑定控件的上下文中使用。
      

  8.   

    @fcuandy 
    updaztepanel我没用过,这个可能你要修改它内部实现的js部分.   或者页面注册一段解本来执行   test方法.我想这个应该是可以实现的.装一下环境再尝试.谢谢你的关注
      

  9.   

    如果采用笨办法, 可以试着用变通的方式,我写了个例子.这样就可以了. 不过我是以id进行比较的,你只要换成你的status的值就可以了.      <asp:Repeater ID="rptList" runat="server">
            <ItemTemplate>
            <select id="<%# Eval("ID") %>">
                <option value="1" <%# writeSelected(Eval("ID"),1) %>>aa</option>
                <option value="2" <%# writeSelected(Eval("ID"),2) %>>bb</option>
                <option value="3" <%# writeSelected(Eval("ID"),3) %>>cc</option>
                <option value="4" <%# writeSelected(Eval("ID"),4) %>>dd</option>
                <option value="5" <%# writeSelected(Eval("ID"),5) %>>ee</option>
            </select>
            </ItemTemplate>
          </asp:Repeater>
       protected void Page_Load(object sender, EventArgs e)
        {
            bindMyData();
        }    private void bindMyData()
        {
            IList al = new ArrayList();
            for (int i = 0; i < 5; i++)
            {
                myObj m = new myObj();
                m.ID = i+1;
                m.Txt = "item" + ((int)(i+1)).ToString();
                al.Add(m);
            }
            rptList.DataSource = al;
            rptList.DataBind();
        }
        public string writeSelected(object obj,int curValue)
        {
            int judgeValue = Convert.ToInt32(obj);
            if (judgeValue == curValue)
            {
                return "selected";
            }
            else
            {
                return "";
            }
        }
    }public class myObj
    {
        public myObj()
        { }
        private int _id;
        private string _txt;
        public int ID
        {
            set { this._id = value; }
            get { return this._id; }
        }    public string Txt
        {
            set { this._txt = value; }
            get { return this._txt; }
        }
    }
      

  10.   

    没怎么用过.net中的控件, 一用就出错,呵呵.