DATALIST问题

lxq19851204 2014-03-12 10:18:32

<asp:DataList ID="CondimentDataList" DataSourceID="SqlDataSource2"
DataKeyField="CondimentName"
runat="server">
<ItemTemplate>
<input type="checkbox" id='<%# Eval("CondimentID") %>' class="regular-checkbox big-checkbox" runat="server" /><label for='<%# Eval("CondimentID") %>' />
<asp:Label ID="lblCondimentName" CssClass="txtcondimentname" Text='<%# Eval("CondimentName") %>' runat="server" />
</ItemTemplate>
</asp:DataList>

iRowCount = CondimentDataList.Items.Count
For iCtr = 0 To iRowCount - 1

tempChk = CondimentDataList.Items(iCtr).FindControl("chkSelect")
If tempChk.Checked = True Then
If sCondiment = "" Then
sCondiment = CondimentDataList.DataKeys(iCtr).ToString()
Else
sCondiment = sCondiment & "," & CondimentDataList.DataKeys(iCtr).ToString()
End If

End If
Next iCtr


ID一样的可以通过FINDCONTROL来找,如果checkbox的ID是后台数据库生成的不一样,

怎么在程序中遍历CHECKBOX选中?




...全文
153 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
lxq19851204 2014-03-13
  • 打赏
  • 举报
回复

<input type="checkbox" id="chkSelect" class="regular-checkbox big-checkbox" runat="server"  /><label runat="server" for="chkSelect"  ></label>
                                        <asp:Label ID="lblCondimentName" CssClass="txtcondimentname"  Text='<%# Eval("CondimentName") %>' runat="server" />
我现在改成这个,通过chkSelect能找的到控件,但是<label runat="server" for="chkSelect" ></label> for="chkSelect" 要改成CondimentDataList_chkSelect_0 ---100 这个在显示的时候JAVASCRIPT怎么写?
  • 打赏
  • 举报
回复
楼主给ck去名字干啥 直接给数据控件 设个主键就行了
  • 打赏
  • 举报
回复
虽然展示在页面上呈现的ID被解析的不一致,但是在后台可以通过如下的方式来找到控件 ,另外你也可以通过JS来获取,不过牵涉到JS+AJAX与后台的交互
foreach (DataListItem dlt in DataList1.Items)  //循环取出DataList里的每一项
{
        //用DataListItem的FindControl方法找到CheckBox,参数为CheckBox的ID,返回为Control类型,将其转换成CheckBox
        CheckBox ckb = (CheckBox)dlt.FindControl("cbDelete"); 
        if (ckb.Checked)  //判断CheckBox是否选中
    {
                int id = Convert.ToInt32(DataList1.DataKeys[dlt.ItemIndex]);  //取出DataList该项的主键,用于数据库删除操作
        PostOperate po = new PostOperate();  //实例化封装的数据操作类
        flag = po.Delete(id);  //执行类中的Delete方法删除数据,删除成功则返回True,如果没有删除数据,flag为false
        }
}
  • 打赏
  • 举报
回复
CheckBox cbox = (CheckBox)dlstProType.Items[i].FindControl("CheckBox1"); 好像是哦
  • 打赏
  • 举报
回复
引用 6 楼 a01589 的回复:
[quote=引用 4 楼 Hsuifengershi 的回复:]
 protected void btnDelete_Click1(object sender, EventArgs e)
    {
        for (int i = 0; i <= dlstProType.Items.Count - 1; i++)
        {

            CheckBox cbox = (CheckBox)dlstProType.Items[i].FindControl("CheckBox1");
            if (cbox.Checked == true)
            {

                int id = Convert.ToInt32(dlstProType.DataKeys[i]);
                RJobType rjobtype = new RJobType();
                rjobtype.Delete(id);
                ijob.Delete("U_Resume", id, "TalentType");
                ijob.Delete("C_Job", id, "TypeID");
            }
        }

        Bind();
    }
你这样写不还是根据ID去找控件么?楼主的意思是这个ID是不确定的[/quote] 查询的结果就没有个唯一建么 那他当控件的 DataKeys
  • 打赏
  • 举报
回复
引用 4 楼 Hsuifengershi 的回复:
 protected void btnDelete_Click1(object sender, EventArgs e)
    {
        for (int i = 0; i <= dlstProType.Items.Count - 1; i++)
        {

            CheckBox cbox = (CheckBox)dlstProType.Items[i].FindControl("CheckBox1");
            if (cbox.Checked == true)
            {

                int id = Convert.ToInt32(dlstProType.DataKeys[i]);
                RJobType rjobtype = new RJobType();
                rjobtype.Delete(id);
                ijob.Delete("U_Resume", id, "TalentType");
                ijob.Delete("C_Job", id, "TypeID");
            }
        }

        Bind();
    }
你这样写不还是根据ID去找控件么?楼主的意思是这个ID是不确定的
祥子爱游戏 2014-03-12
  • 打赏
  • 举报
回复
遍历控件,看谁被选中了
  • 打赏
  • 举报
回复
 protected void btnDelete_Click1(object sender, EventArgs e)
    {
        for (int i = 0; i <= dlstProType.Items.Count - 1; i++)
        {

            CheckBox cbox = (CheckBox)dlstProType.Items[i].FindControl("CheckBox1");
            if (cbox.Checked == true)
            {

                int id = Convert.ToInt32(dlstProType.DataKeys[i]);
                RJobType rjobtype = new RJobType();
                rjobtype.Delete(id);
                ijob.Delete("U_Resume", id, "TalentType");
                ijob.Delete("C_Job", id, "TypeID");
            }
        }

        Bind();
    }
  • 打赏
  • 举报
回复
引用 2 楼 lxq19851204 的回复:
[quote=引用 1 楼 a01589 的回复:]

foreach(Checkbox  chk in CondimentDataList.Items(iCtr))
{
    if(chk.checked==true)
   {
     XXX
   }
}
CondimentDataList.Items(iCtr)是DataListItem类型,不是COLLECTION类型.[/quote] 刚才查了下,确实不能这样遍历,那么这个思路也行不通了,你后台数据库生成的checkBox有没有什么命名规则?如果有规则,那么也是可行的
lxq19851204 2014-03-12
  • 打赏
  • 举报
回复
引用 1 楼 a01589 的回复:

foreach(Checkbox  chk in CondimentDataList.Items(iCtr))
{
    if(chk.checked==true)
   {
     XXX
   }
}
CondimentDataList.Items(iCtr)是DataListItem类型,不是COLLECTION类型.
  • 打赏
  • 举报
回复

foreach(Checkbox  chk in CondimentDataList.Items(iCtr))
{
    if(chk.checked==true)
   {
     XXX
   }
}
  • 打赏
  • 举报
回复
引用 楼主 lxq19851204 的回复:

<asp:DataList ID="CondimentDataList" DataSourceID="SqlDataSource2"
                                DataKeyField="CondimentName"
                                runat="server">
                                    <ItemTemplate>
                                        <input type="checkbox" id='<%# Eval("CondimentID") %>' class="regular-checkbox big-checkbox" runat="server"  /><label for='<%# Eval("CondimentID") %>' />
                                        <asp:Label ID="lblCondimentName" CssClass="txtcondimentname"  Text='<%# Eval("CondimentName") %>' runat="server" />
                                    </ItemTemplate>
                                </asp:DataList>

iRowCount = CondimentDataList.Items.Count
        For iCtr = 0 To iRowCount - 1

            tempChk = CondimentDataList.Items(iCtr).FindControl("chkSelect")
            If tempChk.Checked = True Then
                If sCondiment = "" Then
                    sCondiment = CondimentDataList.DataKeys(iCtr).ToString()
                Else
                    sCondiment = sCondiment & "," & CondimentDataList.DataKeys(iCtr).ToString()
                End If

            End If
        Next iCtr
ID一样的可以通过FINDCONTROL来找,如果checkbox的ID是后台数据库生成的不一样, 怎么在程序中遍历CHECKBOX选中?
ID根本不支持绑定。。
lxq19851204 2014-03-12
  • 打赏
  • 举报
回复
<input type="checkbox" id='<%# Eval("CondimentID") %>' class="regular-checkbox big-checkbox" runat="server" /><label for='<%# Eval("CondimentID") %>' /> 通过生成的ID好像在后台也不能找的到 CheckBox ckb = (CheckBox)dlt.FindControl("81")都找不到
lxq19851204 2014-03-12
  • 打赏
  • 举报
回复
因为之前我是用 <asp:CheckBox ID="chkSelect" CssClass="regular-checkbox" runat="server" /> <asp:Label ID="lblCondimentName" CssClass="txtcondimentname" Text='<%# Eval("CondimentName") %>' runat="server" /> 来写的,但是CSS样式太难看了, 所有我改成 <input type="checkbox" id='<%# Eval("CondimentID") %>' class="regular-checkbox big-checkbox" runat="server" /><label for='<%# Eval("CondimentID") %>' />
  • 打赏
  • 举报
回复
引用 12 楼 lxq19851204 的回复:
现在关键的问题是怎么遍历DataList1里面所有的控件,
不能遍历,我之前查资料也只有FindControl的方式,因此上面回答说看你后台生成的checkbox是否有命名规则
  • 打赏
  • 举报
回复
实现不明白为何从后台去生成的ID,也没有这样的必要.
lxq19851204 2014-03-12
  • 打赏
  • 举报
回复
现在关键的问题是怎么遍历DataList1里面所有的控件,
lxq19851204 2014-03-12
  • 打赏
  • 举报
回复
引用 9 楼 Return_false 的回复:
虽然展示在页面上呈现的ID被解析的不一致,但是在后台可以通过如下的方式来找到控件 ,另外你也可以通过JS来获取,不过牵涉到JS+AJAX与后台的交互
foreach (DataListItem dlt in DataList1.Items)  //循环取出DataList里的每一项
{
        //用DataListItem的FindControl方法找到CheckBox,参数为CheckBox的ID,返回为Control类型,将其转换成CheckBox
        CheckBox ckb = (CheckBox)dlt.FindControl("cbDelete"); 
        if (ckb.Checked)  //判断CheckBox是否选中
    {
                int id = Convert.ToInt32(DataList1.DataKeys[dlt.ItemIndex]);  //取出DataList该项的主键,用于数据库删除操作
        PostOperate po = new PostOperate();  //实例化封装的数据操作类
        flag = po.Delete(id);  //执行类中的Delete方法删除数据,删除成功则返回True,如果没有删除数据,flag为false
        }
}
你这个办法dlt.FindControl("cbDelete") 这个ID是从哪里来了?

62,046

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧