datalist中checkbox 多项删除
protectedvoiddelete_Click(objectsender,EventArgse){for(inti=0;i<DataList1.Items.Count...
protected void delete_Click(object sender, EventArgs e)
{
for (int i = 0; i < DataList1.Items.Count; i++)
{
CheckBox chk = (CheckBox)DataList1.Items[i].FindControl("CheckBox1");
if (chk != null && chk.Checked == true)
{
LinkButton l = (LinkButton)DataList1.Items[i].FindControl("LinkButton1");
// int Uid = Convert.ToInt32(l.Text);
try
{
conn.Open();
string str = string.Format("delete from t_task where task_name='{0}'", l.Text);
SqlCommand cmd = new SqlCommand(str, conn);
cmd.ExecuteNonQuery();
mybind();
}
catch (Exception ee)
{
Console.WriteLine(ee);
}
}
else
{
Response.Write("<script>alert ('请选择!')</script>");
Response.Write("<script> window.location.href=('follow_task_no.aspx')</script>");
}
}
选中多行,但是只删除一行,例如我选中1,2,3行 只删除第1行,其他的都没有删除。 展开
{
for (int i = 0; i < DataList1.Items.Count; i++)
{
CheckBox chk = (CheckBox)DataList1.Items[i].FindControl("CheckBox1");
if (chk != null && chk.Checked == true)
{
LinkButton l = (LinkButton)DataList1.Items[i].FindControl("LinkButton1");
// int Uid = Convert.ToInt32(l.Text);
try
{
conn.Open();
string str = string.Format("delete from t_task where task_name='{0}'", l.Text);
SqlCommand cmd = new SqlCommand(str, conn);
cmd.ExecuteNonQuery();
mybind();
}
catch (Exception ee)
{
Console.WriteLine(ee);
}
}
else
{
Response.Write("<script>alert ('请选择!')</script>");
Response.Write("<script> window.location.href=('follow_task_no.aspx')</script>");
}
}
选中多行,但是只删除一行,例如我选中1,2,3行 只删除第1行,其他的都没有删除。 展开
3个回答
展开全部
下面是我前段时间做的例子:
前台页面:
<ItemTemplate>
<tr id="tr1">
<td>
<asp:HiddenField ID="HiddenField1" runat="server" Value='<%# Eval("ID") %>' />
<asp:HiddenField ID="HiddenField2" runat="server" Value='<%# Eval("#") %>' />
<asp:CheckBox ID="CheckBox2" runat="server" /></td>
<td><img id="imga" src='<%# SetFalse( Eval("#").ToString()) %>' />
</td>
<td><%# Eval("#") %></td>
<td><%# Eval("#") %></td>
</tr>
</ItemTemplate>
后台方法:
//获取ID
private string GetId()
{
StringBuilder sbitems = new StringBuilder();
foreach (DataListItem item in DataList1.Items)
{
//获取前台控件
CheckBox chkbox = item.FindControl("CheckBox2") as CheckBox;
HiddenField HiId = item.FindControl("HiddenField1") as HiddenField;
//如果checkbox被check了,那么将对应的label绑定的值赋给sbitems,以进行后续的操作,比如删除。
if (chkbox == null || HiId == null)
{
continue;
}
if (chkbox.Checked)
{
sbitems.Append(HiId.Value.ToString());
sbitems.Append(",");
}
}
//int n = sbitems.Length;
//string strId = sbitems.ToString().Substring(n);
return sbitems.ToString();
}
前台页面:
<ItemTemplate>
<tr id="tr1">
<td>
<asp:HiddenField ID="HiddenField1" runat="server" Value='<%# Eval("ID") %>' />
<asp:HiddenField ID="HiddenField2" runat="server" Value='<%# Eval("#") %>' />
<asp:CheckBox ID="CheckBox2" runat="server" /></td>
<td><img id="imga" src='<%# SetFalse( Eval("#").ToString()) %>' />
</td>
<td><%# Eval("#") %></td>
<td><%# Eval("#") %></td>
</tr>
</ItemTemplate>
后台方法:
//获取ID
private string GetId()
{
StringBuilder sbitems = new StringBuilder();
foreach (DataListItem item in DataList1.Items)
{
//获取前台控件
CheckBox chkbox = item.FindControl("CheckBox2") as CheckBox;
HiddenField HiId = item.FindControl("HiddenField1") as HiddenField;
//如果checkbox被check了,那么将对应的label绑定的值赋给sbitems,以进行后续的操作,比如删除。
if (chkbox == null || HiId == null)
{
continue;
}
if (chkbox.Checked)
{
sbitems.Append(HiId.Value.ToString());
sbitems.Append(",");
}
}
//int n = sbitems.Length;
//string strId = sbitems.ToString().Substring(n);
return sbitems.ToString();
}
展开全部
FindControl 方法传入的参数是控件的ID啊 是唯一的 所以你的循环每次找到的都是同一个名为"Checkbox1"的checkbox LinkButton也是同理
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
CheckBox chk = (CheckBox)DataList1.Items[i].FindControl("CheckBox1");ID只有1个,,固定了。当然只能删除一个了.
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询