通过DataRepeater进行迭代(VB.Net PowerPack)

通过DataRepeater进行迭代(VB.Net PowerPack),vb.net,winforms,datarepeater,powerpacks,Vb.net,Winforms,Datarepeater,Powerpacks,我正在使用vb.net电源包中的winform datarepeater控件 除复选框列外,中继器上的所有项目都是只读的 我想遍历这些项目,并找出选中了哪些复选框 我在控件上找不到datarepeateritems的集合,并且缺少帮助 谢谢您的帮助。为什么不检查datarepeater的数据源呢 例如,我将一个datarepeater绑定到个人的Bindingsource 请参阅按钮处理程序 private void Form1_Load(object sender, EventArgs

我正在使用vb.net电源包中的winform datarepeater控件

除复选框列外,中继器上的所有项目都是只读的

我想遍历这些项目,并找出选中了哪些复选框

我在控件上找不到datarepeateritems的集合,并且缺少帮助


谢谢您的帮助。

为什么不检查datarepeater的数据源呢

例如,我将一个datarepeater绑定到个人的Bindingsource 请参阅按钮处理程序

    private void Form1_Load(object sender, EventArgs e)
    {
        List<Person> persons = new List<Person>();
        persons.Add(new Person { Name = "Peter", IsLocal = true });
        persons.Add(new Person { Name = "Sepp", IsLocal = false });
        persons.Add(new Person { Name = "Franz", IsLocal = false });

        personBindingSource.DataSource = persons;
    }


    private void buttonCountCheckBox_Click(object sender, EventArgs e)
    {
        int i = 0;

        foreach (Person singlePerson in personBindingSource)
        {
            if (singlePerson.IsLocal)
            {
                i++;
            }

        }
        Console.WriteLine("DEBUG: checked found: " + i);
    }
private void Form1\u加载(对象发送方,事件参数e)
{
列表人员=新列表();
添加(新人物{Name=“Peter”,IsLocal=true});
添加(新的Person{Name=“Sepp”,IsLocal=false});
添加(新人物{Name=“Franz”,IsLocal=false});
personBindingSource.DataSource=个人;
}
私有无效按钮计数复选框\单击(对象发送者,事件参数e)
{
int i=0;
foreach(personBindingSource中的PersonSinglePerson)
{
if(单人。本地)
{
i++;
}
}
Console.WriteLine(“调试:选中并找到:+i”);
}

您可以遍历控件列表(由模板生成)

  • 将datarepeater中的复选框重命名为“checkBoxUnbound”

  • 使用下面的代码

    private void button3_Click(object sender, EventArgs e)
    {
        int i = 0;
        CheckBox unboundCheckBox;
        foreach (Control c in dataRepeater1.Controls)
        {
            unboundCheckBox = c.Controls["checkBoxUnbound"] as CheckBox;
            if (unboundCheckBox != null && unboundCheckBox.Checked)
            {
                i++;
            }
        }
    
        Console.WriteLine("DEBUG: checked found: " + i);
    
    }
    

  • 这是前一段时间提出的问题,但以防万一其他人正在寻找答案:

    for (int i = 0; i < this.dataRepeater1.ItemCount; i++)
    {
        this.dataRepeater1.CurrentItemIndex = i;
    
        CheckBox checkBox = (CheckBox)
                    this.dataRepeater1.CurrentItem.Controls["controlName"];
        bool isChecked = checkBox.Checked;
    }
    
    for(int i=0;i

    这种方法使处理/读取同一中继器项上的任何相关控件变得更加容易。

    复选框未绑定,也不是数据源的一部分。它是第一列,用于检查操作,例如删除所有选定项。我对此进行了测试,如果您的项目多于适合我控制的项目,则此操作将不起作用。这意味着只有通过滚动才能看到的控件将不会出现在
    dataRepeater1.controls
    中@彼得·格法德,有什么想法吗?嗯。。。现在不行。也许有另一种方法可以迭代所有控件。我原以为“.Controls”是一个可能的解决办法:一个
    列表
    集合
    或类似的东西跟踪可能的更改(例如行选择-我支持筛选结果,所以这个策略对我有效)我有很多事件,比如
    DataRepeater\u item单击
    ou
    DataRepeater\u DrawItem
    ,以正确地显示/更新元素。迭代时,我迭代列表/集合,而不是
    DataRepeater
    本身。这不是一个优雅的解决方案,但确实有效。