1.在一个DataGrid里面有一个CheckBoxList,并已经绑定数据;
2.CheckBoxList里面分别有:A,B,C三个选项;
3.当点击DataGrid里面的"编辑"时进行编辑;问题:因为我在绑定DataGrid时 CheckBoxList里面已经进行选择了,即已经有数据了,
但当我点击"编辑"时,CheckBoxList的选项都没有"打勾",即是:我本来已经选择了"C",但编辑时CheckBoxList里面的C项不是打勾.我需要的是有打勾的.应该怎么做呢?说得不太清楚,希望有朋友能够明白我的意思并给我指点迷津,谢谢!

解决方案 »

  1.   

    因为你点击编辑后,以前打勾的行就变成可以输入的了。就等于你打勾的行重新加载了,所以CheckBox恢复到了原来的状态。你应该在点击编辑按钮后再用代码给CheckBoxList中的CheckBox赋值
      

  2.   

    在ItemDataBound里面做,根据数据值,然后打勾
      

  3.   

    if(!IsPostBack)
    {
    DataGrid.DataBind();绑定代码在这里面
    }
      

  4.   

    你要添加DataGrid的EditItemTemplate
    并在 ItemDataBound事件中重新找到CheckBoxList并绑定你的数据private void DataGrid1_ItemDataBound(object sender, System.Web.UI.WebControls.DataGridItemEventArgs e)
    {  
    CheckBoxList c;
    if(e.Item.ItemType == ListItemType.EditItem)
    {
    c = (CheckBoxList)e.Item.FindControl("CheckBoxList2");
    if(c != null)
    {
    //重新绑定c的数据,并设置其选中项
    }
    }
    }
      

  5.   

    ItemDataBound事件中编辑按钮后再用代码给CheckBoxList中的CheckBox赋值
      

  6.   

    oh~~我说错了,CheckBoxList不是靠数据库绑定的,例如开始时我开始时我选择了"甲"项,数据表里面的Behave栏就会更新为"甲",如果再点"编辑",我要的结果是展开时出现CheckBoxList的所有选择,之前"甲"项被选择中了,就打勾.不好意思,刚才说错了.
    以下是代码:<asp:TemplateColumn HeaderText="員工表現">
    <ItemStyle VerticalAlign="Top"></ItemStyle>
    <ItemTemplate>
    <asp:Label runat="server" Text='<%# DataBinder.Eval(Container, "DataItem.Behave") %>' ID="lblBehave">
    </asp:Label>
    </ItemTemplate>
    <EditItemTemplate>
    <asp:CheckBoxList runat="server" Width="156px" ID="cblBehave">
    <asp:ListItem Value="0">代表工作表現很差</asp:ListItem>
    <asp:ListItem Value="1">代表工作表現差</asp:ListItem>
    <asp:ListItem Value="2">代表工作表現一般</asp:ListItem>
    <asp:ListItem Value="3">代表工作表現好</asp:ListItem>
    <asp:ListItem Value="4">代表工作表現很好</asp:ListItem>
    <asp:ListItem Value="甲">代表甲班</asp:ListItem>
    <asp:ListItem Value="乙">代表乙班</asp:ListItem>
    <asp:ListItem Value="丙">代表丙班</asp:ListItem>
    <asp:ListItem Value="丁">代表丁班</asp:ListItem>
    </asp:CheckBoxList>
    </EditItemTemplate>
    </asp:TemplateColumn>
      

  7.   

    即是点击编辑时,之前选择的项的状态为Selected
      

  8.   

    if(!IsPostBack)
    {
        DataGrid.DataBind();绑定代码放在这里面
    }
      

  9.   

    你去lovecherry.cnblogs.com看看datagrid系列里面文章
      

  10.   

    "(原创)如何datagrid分页保持每页先前选择的checkbox的状态? "这篇吗?但我不是换页,而是点击"编辑"哦
      

  11.   

    EditItemTemplate
    编辑以后会触发这个事件的,你把在ItemDataBound里面写的事件再写一遍(就绑定打钩的代码),这样就可以了阿
      

  12.   

    大家说能不能用ViewState先把CheckBoxList原本的值记住,再赋给点击"编辑"后的CheckBoxList呢?但怎么赋值给它呢?我写了一半的代码,如下:SqlConnection myConnection = new SqlConnection(SQLCONNECTIONSTRING);
    string strSQL = "Select Behave From RaisesTemp Where ViewOrder=@ViewOrder";
    SqlCommand myCommand = new SqlCommand(strSQL,myConnection);
    myConnection.Open();
    myCommand.Parameters.Add(new SqlParameter("@ViewOrder",SqlDbType.Int));
    myCommand.Parameters["@ViewOrder"].Value = ((Label)e.Item.FindControl("lblViewOrder")).Text;
    ViewState["Behave"] = myCommand.ExecuteScalar();
    myConnection.Close();
    string str = ViewState["Behave"].ToString();
    lblMessage.Text = str.ToString();后面关于赋值给CheckBoxList并作出带有打勾的动作就不知道怎么写了.求解,谢谢!
      

  13.   

    说得一大堆,看的我稀里糊涂的 ....try ->// 编辑事件中记得重新绑定 DataList
    // 然后 ->protected void DataGrid1_ItemDataBound(object sender, DataGridItemEventArgs e)

    CheckBoxList chk;
    if(e.Item.ItemType == ListItemType.EditItem)
    {
    chk = (CheckBoxList)e.Item.FindControl("cblBehave");
    if(chk != null)
    {
    DataRowView drv = e.Item.DataItem as DataRowView;
    ListItem item = chk.Items.FindByValue(drv["Behave"].ToString());
    chk.SelectedIndex = item == null ? -1 : chk.Items.IndexOf(item);
    }
    }
    }
      

  14.   

    刚建立了一个软件开发技术和休闲交流的QQ群44540509,java,.net,c/c++,php,linux,unix、软件测试等技术、休闲讨论区,欢迎大家加入!