将数据表绑定到具有水平重复的复选框列表?

时间:2016-05-11 14:33:41

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

这适用于Windows Form

我们有DataTable,如下所示:

EmplId

A101
A102
A103
A104
A105
B101
B102
B103
B104

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

enter image description here

如果那是不可能的,那么我还有哪些建议可以将DataTable显示在一组我可以选择的控件中?

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

2 个答案:

答案 0 :(得分: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");
                    }
                }
            }

答案 1 :(得分:0)

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

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