【问题标题】:Bind datatable to Checkbox list with horizontal repeat?将数据表绑定到具有水平重复的复选框列表?
【发布时间】:2016-05-11 14:33:40
【问题描述】:

这是给Windows Form

我们有一个DataTable,如下所示:

EmplId

A101
A102
A103
A104
A105
B101
B102
B103
B104

是否可以将一组组合框绑定到此 DataTable,使其看起来像这样?

如果这不可能,您还有什么其他建议可以让我将这个DataTable 显示到一组控件中,然后我可以选择?

我知道我可以使用CheckedListBox,但我希望重复方向是水平的。而且似乎CheckedListBox 没有RepeatDirection 属性。 谢谢。

【问题讨论】:

  • 循环遍历它,创建您的复选框控件并将它们附加到您的表单或父控件。
  • 您的意思是使用CheckedListBox

标签: c# winforms visual-studio-2010 windows-forms-designer


【解决方案1】:

试试这个,你可以随心所欲地改进它:

            int x = 4;
            int y = 4;
            foreach (DataRow dt in YourDataTable.Rows)
            {
                x = 4;
                y = panel1 .Controls.Count * 20;
              CheckBox ck=new CheckBox() ;
                ck.Text =dt[2].ToString ();

                 ck.Width = 450;  //  determine the width to fit 3 columns
                ck.Location = new Point(x, y);
                ck.CheckedChanged += new System.EventHandler(MyEven);   
                Form1.Controls .Add (ck);

            }

为处理 CheckedChanged 添加此方法:

public void MyEven(object sender, EventArgs e)
        {
            CheckBox chek = (CheckBox)sender;
            MessageBox.Show("Check is pressed " + chek.Text);

        }

//读取所有选中的复选框

 foreach (Control c in flowLayoutPanel1.Controls)
            {
                if (c is CheckBox)
                {
                    CheckBox ck = (c as CheckBox);
                    if (ck.Checked)
                    {
                        MessageBox.Show("Check " + ck.Text + " is chcked");
                    }
                }
            }

【讨论】:

  • 谢谢。所以我在Form 中添加了Panel,并包含了您的代码,但我在Form1.Controls .Add (ck); 行中收到了编译器错误。我没有使用 Form1,而是使用了我的表单的名称。
  • 我在表单中有一个面板(“Panel1”),您可以使用 :Panel1.Controls .Add (ck);
  • 它的工作方式类似于CheckedListBox。这可以横向完成吗?以及如何读取选中控件的值?
  • 我已经编辑了我的答案,以向您展示如何读取选中控件的值。如果我的答案对您有帮助,请标记它。谢谢
  • 如果我将 20 更改为另一个数字,我注意到复选框之间的垂直间距存在差异。但它只显示在一列中。
【解决方案2】:

TableLayoutPanel 放在表单上。将ColumnCount 属性设置为 3。

foreach (DataRow row in dataTable.Rows)
{
    var checkBox = new CheckBox();
    checkBox.Text = row["EmpId"].ToString();
    tableLayoutPanel.Controls.Add(checkBox);
}

【讨论】:

    猜你喜欢
    • 2017-04-14
    • 2018-01-03
    • 1970-01-01
    • 2014-11-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-28
    • 2014-07-18
    相关资源
    最近更新 更多