我在datagrid中放了checkbox,为了实现多选删除,或者全选删除的功能,但是不知道是什么问题,导致checkbox的值一直没有办法取出来,一直都是false,请大家帮帮忙,谢谢了
下面是我前台datagrid的代码和后台删除的代码:
<asp:DataGrid ID="dgBlog" runat="server" AutoGenerateColumns="False" GridLines="Horizontal" Width="100%" OnDeleteCommand="dgBlog_DeleteCommand" 
DataKeyField="ID" OnItemCommand="dgBlog_ItemCommand" OnItemDataBound="dgBlog_ItemDataBound" OnItemCreated="dgBlog_ItemCreated">
                       
                        <Columns>
                            <asp:TemplateColumn>
                                <HeaderTemplate>
                                    选择
                                </HeaderTemplate>                                <ItemTemplate>
                                    <asp:CheckBox ID="CheckBox1" runat="server" />
                                </ItemTemplate>
                             </asp:TemplateColumn>
                            <asp:TemplateColumn>
                                <HeaderTemplate>
                                    日志编号
                                </HeaderTemplate>
                                <ItemTemplate>
                                <a href="ModifyDeptBlog.aspx?id=<%#DataBinder.Eval(Container.DataItem,"ID") %>" ><asp:Label ID="lblid" runat="server" Text='<%#DataBinder.Eval(Container.DataItem,"ID") %>'></asp:Label></a>
                                </ItemTemplate>
                            </asp:TemplateColumn>
                            <asp:BoundColumn DataField="DM_Title" HeaderText="标题">
                             </asp:BoundColumn>
                            <asp:BoundColumn DataField="DM_SubTitle" HeaderText="副标题">
                            </asp:BoundColumn>
                            <asp:BoundColumn DataField="DM_PubTime" HeaderText="发表时间">
                             </asp:BoundColumn>
                            <asp:BoundColumn DataField="DM_Hits" HeaderText="点击次数" ReadOnly="True">
                             </asp:BoundColumn>
                            <asp:BoundColumn DataField="DM_Cmts" HeaderText="评论次数" ReadOnly="True">
                              </asp:BoundColumn>
                            <asp:TemplateColumn>
                                <ItemTemplate>
                                    &nbsp;<asp:Label ID="lblStatus" runat="server"></asp:Label>
                                </ItemTemplate>
                                <HeaderStyle Width="10%" />
                            </asp:TemplateColumn>
                            <asp:ButtonColumn CommandName="issue" Text="发布">
                            </asp:ButtonColumn>
                            <asp:ButtonColumn CommandName="Delete" HeaderText="操作" Text="删除">
                            </asp:ButtonColumn>
                        </Columns>
                       </asp:DataGrid>
下面是后台代码:
 protected void btnAction_Click(object sender, EventArgs e)
    {
        OperateDB db = new OperateDB();
        foreach (DataGridItem dgi in DataGrid1.Items)
        {
            CheckBox cb = (CheckBox)dgi.FindControl("CheckBox1");
            if (cb.Checked)
            {
                Label lb = (Label)dgi.Cells[1].FindControl("lblid");
                string sql = "update bc_deptmessages set dm_delr=1 where  id=" + lb.Text + "";
                db.ExcSQL(sql);
            }
        }
        BindData();    }
 protected void Page_Load(object sender, EventArgs e)
    {
        btnAction.Attributes.Add("onclick", "return confirm('确定删除么?');");
        if (!Page.IsPostBack)
        {
            BindData();
            
        }
    } private void BindData()
    {
        OperateDB db = new OperateDB();
        string sql = "select * from bc_deptmessages where dm_adminid=" + Session["uid"] + " and dm_delr=0 and dm_source=0";
        DataTable dt = db.SelectTB(sql);
        AspNetPager1.RecordCount = dt.Rows.Count;
        dt = db.SelectTB(sql, AspNetPager1.PageSize * (AspNetPager1.CurrentPageIndex - 1), AspNetPager1.PageSize, "bxfinish");
        DataGrid1.DataSource = dt;
        DataGrid1.DataBind();
        AspNetPager1.CustomInfoText = "&nbsp;记录总数:<font color='blue'><b>" +     AspNetPager1.RecordCount.ToString() + "</b></font>" + " 总页数:<font color='blue'><b>" + AspNetPager1.PageCount.ToString() + "</b></font>" + " 当前页:<font color='red'><b>" + AspNetPager1.CurrentPageIndex.ToString() + "</b></font>";
       
            }
我先把我觉得比较关键的代码放上来,如果大家不够的话请说,我继续放,谢谢了

解决方案 »

  1.   

    CheckBox cb = (CheckBox)dgi.FindControl("CheckBox1");
    改为试试
    CheckBox cb = (CheckBox)dgi.Cells[0].FindControl("CheckBox1");
      

  2.   

    还是取不到的,checkbox的checked还是false
      

  3.   

    没具体看,不过是这里错了
    CheckBox cb = (CheckBox)dgi.FindControl("CheckBox1");
    改成
    CheckBox cb = (CheckBox)dgi.Items.Cells[].FindControl("CheckBox1");
      

  4.   

    <Columns>
    <asp:TemplateColumn>
    <ItemTemplate>
    <asp:CheckBox id="chkExport" runat="server"></asp:CheckBox>
    </ItemTemplate>
    <EditItemTemplate>
    <asp:CheckBox id="chkExportON" runat="server"></asp:CheckBox>
    </EditItemTemplate>
    </asp:TemplateColumn>

    </Columns>
    System.Web.UI.WebControls.CheckBox chkExport;
    String sID;
    System.Text.StringBuilder strMsg = new System.Text.StringBuilder("选中项的City字段值分别为:<hr color=red>");
    //循环取的DataGrid控件中选定项的值
    foreach(DataGridItem oDataGridItem in dgCheckBox.Items)
    { chkExport = (CheckBox)oDataGridItem.FindControl("chkExport");
    //如果选中了则取值
    if(chkExport.Checked)
    { }
    }
      

  5.   

    不是很明白你的意思,我这个datagrid没有编辑按钮的,加<EditItemTemplate>有什么用意呢?麻烦你了,能不能详细的解释一下,谢谢
      

  6.   

    <asp:CheckBox id="chkExportON" runat="server"></asp:CheckBox>
    你定义了之后不使用么???
      

  7.   

    我在<EditItemTemplate>里面加了一个<asp:CheckBox id="chkExportON" runat="server"></asp:CheckBox>,但是没有使用它,还是这样的,没有取到值
      

  8.   

    http://www.cnblogs.com/weekzero/archive/2005/08/09/210674.aspxhttp://www.cnblogs.com/weekzero/archive/2006/05/05/392188.aspx
      

  9.   

    绑定数据的时候没有放在
    if(!IsPostBack)
    { 绑定数据///
    }
    这样就行了呀
      

  10.   

    CheckBox cb = (CheckBox)dgi.Items[i].Cells[].FindControl("CheckBox1");
    这样就OK
      

  11.   

    CheckBox cb=(CheckBox)dgi.Items.Cells[0].FindControl("CheckBox1");