我在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>
<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 = " 记录总数:<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>";
}
我先把我觉得比较关键的代码放上来,如果大家不够的话请说,我继续放,谢谢了
下面是我前台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>
<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 = " 记录总数:<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>";
}
我先把我觉得比较关键的代码放上来,如果大家不够的话请说,我继续放,谢谢了
改为试试
CheckBox cb = (CheckBox)dgi.Cells[0].FindControl("CheckBox1");
CheckBox cb = (CheckBox)dgi.FindControl("CheckBox1");
改成
CheckBox cb = (CheckBox)dgi.Items.Cells[].FindControl("CheckBox1");
<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)
{ }
}
你定义了之后不使用么???
if(!IsPostBack)
{ 绑定数据///
}
这样就行了呀
这样就OK