我也正要找这个问题的解决方法,通过datalist.items[i].Controls[i]是可以找到checkbox,但是就是不能对其进行操纵,如果用FindControl,则编译出错:
无法将类型“System.Web.UI.Control”隐式转换为“System.Web.UI.WebControls.CheckBox”

解决方案 »

  1.   

    解决了这个问题
    当在模板中利用了这样一个checkBox
    <input type="checkbox" Checked='<%# …… %>' value='<%# ……%>' id="chk1" runat="server" >
    在程序中这样一用就行了
    ((HtmlInputCheckBox) dataList1.Items[i].FindControl("chk1")).Checked
    ((HtmlInputCheckBox)dataList1.Items[i].FindControl("chk1")).Value
    详细内容参考SDK
    http://localhost/quickstart/util/srcview.aspx?path=/quickstart/aspplus/samples/portal/portal.src&file=CS\restricted/customize.aspx&font=3
    http://localhost/quickstart/util/srcview.aspx?path=/quickstart/aspplus/samples/portal/portal.src&file=CS\restricted/customize.cs&font=3
    就是 A Personalized Portal
    那个例子
      

  2.   

    hdg_sy(白杨树) :如果用checkBox的话,那么多选项的数目就定了,而我的多选项的数目没办法定呀,我必须用CheckBoxList,然后把数据绑定上去的
      

  3.   

    搞了半天终于搞定了(不知道我的方法达到wolf的要求没有:) 本来很少到asp.net来的,为了捞点分才到处看看有没有没解决的问题。这里终于发现一个;)关于EditCommand里面无法findcontrol的问题偶也遇到,想来原因是这个事件触发的时候响应的edittemplate control还没有生成,所以找不到。(我的想法是不在页面里面写<%# ………… %> 而是找到edittemplate里面的control,然后直接用code-behinde里面的代码来给control的datasource直接赋值,不过失败啦~~ :)我的解决办法是,用一个local变量记录editcommand 触发时e.Item.ItemIndex对应的记录相应字段的值(我用的是pub库author表,记录了state字段的值,比如当前editcommand触发的记录对应state字段是CA)。生成CheckBoxList的DataSource后(我的数据源不是View而是一个ArrayList,也就是把DataSet里面的state字段可能的值都灌到了一个ArrayList中去),在生成的DataSource中找到记录下来的值(就是上面记录下来的CA)在ArrayList中的index(用ArrayList.IndexOf方法)。然后帮定CheckBoxList的时候用一个getStateIndex方法把这个index帮定到CheckBoxList的SelectedIndex上面。这样在原来的值对应的CheckBox上面就会打一个勾。对于DropDownList来说,当前选中的就是原来对应的值,而不是数据源中的第一个值。选中多个CheckBox还没有想过 ;) 
      

  4.   

    能不能考虑在edittamplate里用datalist或者repeater,在datalist(repeater)里嵌入单个的checkbox而不是用checkboxlist
      

  5.   

    我也遇到了同样的问题,为了简单,我的解决办法是不用bind,用asp的do...while老方法生成,这样的话,就用Request["checkname"]可以得到多选的值了