Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在asp listview对象中标识选定的复选框_C#_Asp.net - Fatal编程技术网

C# 在asp listview对象中标识选定的复选框

C# 在asp listview对象中标识选定的复选框,c#,asp.net,C#,Asp.net,我一直试图理解ASP中的ListView对象,但无法通过编程方式获取所选复选框或对其进行迭代。下面是我在这里看到最多的两种方法,但到目前为止,我尝试过的所有方法似乎都不适合我 任何帮助都将不胜感激 .ASPX页 .CS代码隐藏 我不在VisualStudio附近,但从我的头脑中我看到了它不迭代的两个原因。 1.应将此ListView绑定到OnLoad方法中的源: 二,。控件不包含复选框类型的项,因此OfType会过滤掉所有元素。如果调试并在courseListView.Controls.OfTy

我一直试图理解ASP中的ListView对象,但无法通过编程方式获取所选复选框或对其进行迭代。下面是我在这里看到最多的两种方法,但到目前为止,我尝试过的所有方法似乎都不适合我

任何帮助都将不胜感激

.ASPX页

.CS代码隐藏


我不在VisualStudio附近,但从我的头脑中我看到了它不迭代的两个原因。 1.应将此ListView绑定到OnLoad方法中的源:

二,。控件不包含复选框类型的项,因此OfType会过滤掉所有元素。如果调试并在courseListView.Controls.OfType中的foreach复选框ctrl上放置断点,您将看到该复选框是courseListView的子项之一。因此,根据包含复选框的控件构建逻辑,编写相应的逻辑,如下所示:

    var checkBox = courseListView.Controls.Cast<Control>().First().FindControl("courseIdchk");
更新2

ASPX:

代码隐藏:

protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);
        if (!IsPostBack)
        {
            courseListView.DataSource = GetCourses();
            courseListView.DataBind();
        }
        else
        {
            var result = string.Empty;

            var findCheckedQuery = courseListView
                .Controls
                .Cast<Control>()
                .Select(x => (CheckBox)x.FindControl("chkBox"))
                .Where(x => x.Checked)
                .Select(x => x.Text);
            result = string.Join(", ", findCheckedQuery.ToArray());
        }
    }

它是在foreach中的复选框中迭代,但没有得到它们的文本,或者甚至没有这样做?它似乎甚至没有在foreach中迭代。我在循环中放了一个简单的计数器,它返回为零。谢谢你的观察。我确实绑定了数据源,但没有包含该语句。很抱歉让我尝试一下您关于执行调试和单步执行代码的建议,看看是否可以找到复选框所处的适当级别。谢谢。是的,像这样的东西!但这并不安全,在布局上做了一些小的改变——你会得到一个IndexOutOfRangeException:好的,下面找到了第一个复选框,所以我至少知道了子项的位置。我显然可以为我建立nexted。。。和foreach循环,但对于这样一个简单的请求,这似乎有点过分。我错过了什么?foreach复选框courseListView.Controls[0]。Controls[1]。Controls.of类型{i++;如果ctrl.Checked result+=:+ctrl.Text;},请详细说明如何将这些复选框设置为true,我想,按用户和以下表单重新加载?listView最初在Page_Load事件中填充,但在isPostBack下除外。用户应该选择任意数量的所选复选框,提交,然后我的代码将根据所选值继续处理。
if (!IsPostback) {
  courseListView.DataSource = GetCourses();
  courseListView.DataBind();
}
    var checkBox = courseListView.Controls.Cast<Control>().First().FindControl("courseIdchk");
var findCheckedQuery = courseListView.Controls[0]
                .Controls
                .Cast<Control>()
                .Select(ctrl => ctrl.FindControl("chkBox") as CheckBox)
                .Where(chk => chk != null && chk.Checked);                
result = string.Join(":", findCheckedQuery.Select(x => x.Text).ToArray());
<asp:Repeater ID="courseListView" runat="server">
        <ItemTemplate>
            <asp:CheckBox ID="chkBox" data-id="<%#((Course)Container.DataItem).CourseId %>" Text="<%#((Course)Container.DataItem).Title %>" runat="server" />
            <br/>
        </ItemTemplate>
    </asp:Repeater>
    <asp:Button runat="server" UseSubmitBehavior="True" Text="Submit"/>
protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);
        if (!IsPostBack)
        {
            courseListView.DataSource = GetCourses();
            courseListView.DataBind();
        }
        else
        {
            var result = string.Empty;

            var findCheckedQuery = courseListView
                .Controls
                .Cast<Control>()
                .Select(x => (CheckBox)x.FindControl("chkBox"))
                .Where(x => x.Checked)
                .Select(x => x.Text);
            result = string.Join(", ", findCheckedQuery.ToArray());
        }
    }