【问题标题】:Dynamically create checkboxes for each object in list为列表中的每个对象动态创建复选框
【发布时间】:2016-10-17 15:38:11
【问题描述】:

我有一个项目,我想注册某个小组的哪些成员在某个日期参加了会议。

我想要的功能是:

  • 您可以在列表框中选择哪个组开会。
  • 该组的所有成员都显示在另一个列表框中,并且每个成员都有一个复选框。
  • 您可以通过单击复选框来标记每个参加的成员。
  • 您从日历视图中选择一个日期。
  • 然后,我想将参与人员的每个 ID 发送到 SQL 查询循环,该循环将其插入数据库。

我的问题是我一直在尝试为列表中的每个对象“成员”动态创建复选框。有没有聪明的方法来做到这一点?

我认为我将遍历复选框组中的每个选定复选框,并从每个成员 checkbox.checked 中选择成员 ID,并将其传递给 SQL 查询。

欢迎所有输入,因为我有点卡在这里。 :-)

【问题讨论】:

  • 为了帮助您,我们需要更多信息:您已经尝试过哪些代码? Provide a Minimal, Complete, and Verifiable example。您正在使用哪种技术(WinForms、WPF、ASP.NET,另一种?)?
  • 抱歉忘了提我使用 Win 表格。 :-) 在将组的所有“成员”对象都放入列表框后,我被卡住了。所以我需要找出某种方法,为该列表框中添加的每个项目添加一个复选框。
  • 为什么不使用 CheckedListBox 或带有 CheckBoxes 的 ListView?

标签: c# .net loops checkbox dynamic


【解决方案1】:

我通过使用像 Sidewinder94 建议的 CheckedListBox 解决了这个问题,谢谢!

用我的人员列表中的对象填充复选框的第一种方法:

    public void FillCheckBox(List<person> listan)
    {
        checkedListBox1.Items.Clear();
        foreach (person item in listan)
        {
            checkedListBox1.Items.Add(item, true);
        }
    }

然后我遍历所有选中的项目并使用“checkedListBox1.CheckedItems”集合查询我的数据库并插入所有选中的项目。

    private void button1_Click(object sender, EventArgs e)
    {
        postgresConnection _con = new postgresConnection();

        group va = (group)comboGrupper.SelectedItem;

        int index = va.gruppid;

        foreach (person item in checkedListBox1.CheckedItems)
            {
                _con.AddPeopleAttendance(item.personid, index);
            }
    }

感谢您的帮助! :-)

【讨论】:

  • 很高兴你能发布你的问题的解决方案 :) 这可能会在未来帮助其他人。
  • 希望它会!感谢您的帮助,这只是我前进所需要的推动力!=)
【解决方案2】:

假设您使用的是 WPF,您可以为该会议的每个成员创建用户控件。如果这样做,则 UserControl 中的一个简单复选框就足够了。如果您将 UC 存储在列表或数组中,您可以在集合中循环,如果选中该复选框,则将其添加到存储参与者人员的辅助列表/数组中。

public class PersonUC : UserControl
{
   public Person;
   public PersonUC(Person p)
   {
    Person = p;
   }
}

public class MainWindow
{
    private List<PersonUC> personUCs;

    private void MethodCalledAfterEventSelected(List<Person> p)
    {
        //circle through the collection to add the UCs to your listbox
        personUCs = new List<PersonUC>();
        foreach(var item in p)
        {
            personUCs.Add(new PersonUC(item));
        }
        yourListBox.Items = personsUC;
    }

    private List<Person> GetAttendet()
    {
        List<Person> attendet = new List<Person>();
        foreach (PersonUC item in personsUC) 
        {
            if(item.youCheckboxName.Checked)
                attendet.Add(item.Person);
        }
        return attendet;
    }
}

代码未经测试,所以可能有一些错误,但我希望我能帮忙。

【讨论】:

  • 抱歉忘了提我使用 Win 表格。 :-) 在将组的所有“成员”对象都放入列表框后,我被卡住了。所以我需要找出某种方法,为该列表框中添加的每个项目添加一个复选框。
  • 你把事情复杂化了。尝试在 ListBox 中阅读有关 ItemTemplate 的信息,它的存在是为了这些类型或目的(您应该始终尝试在 WPF 中尽可能少地隐藏代码)。
猜你喜欢
  • 1970-01-01
  • 2016-06-16
  • 1970-01-01
  • 1970-01-01
  • 2018-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-18
相关资源
最近更新 更多