1

我想设计一个界面,在数据网格中显示按钮 - 每天及其 24 小时。总而言之,我们将展示:24 * 7 = 168 个按钮。

知道如何做到这一点吗?

4

2 回答 2

1

有一个称为框架接口ITypedList,它允许您以数据绑定可以理解的方式直接指定要为每个组成成员显示的属性。

意识到尝试以这种方式进行绑定是绝对可怕的。基本步骤如下:

  • 实现一个实现的集合类型ITypedList
  • 对于集合中的每一项,返回一个PropertyDescriptor封装行/列对的值的;
  • 像往常一样将数据绑定到集合

我已经将其作为一项实验进行了,并且它确实有效,但是您必须跳过以使一切正常工作的箍是一场噩梦。不过,我通常认为它比直接操作视图逻辑更好。DataGridView 意味着足够智能,可以从绑定中推断出它需要做的所有事情,如果我可以修改绑定目标而不是控件,那就是我更喜欢的。

于 2012-09-16T11:54:12.287 回答
1

我做了一个如何完成的示例代码!这段代码只创建按钮,所以检查一下:注意:按你自己的方式命名按钮,我只是做了一个例子!

        dataGridView1.AllowUserToAddRows = false;
        for (int i = 0; i < 24; i++)
        {
            DataGridViewButtonColumn btnColumn = new DataGridViewButtonColumn();
            btnColumn.HeaderText = string.Format("{0}:00", i+1);
            btnColumn.Name = "dayColumn";
            btnColumn.Width = 40; //set yout width
            dataGridView1.Columns.Add(btnColumn);
        }
        for (int i = 0; i < 7; i++)
        {
            dataGridView1.Rows.Add();
            dataGridView1.Rows[i].HeaderCell.Value = (i + 1).ToString();
            for (int j = 0; j < dataGridView1.Columns.Count; j++)
            {
                dataGridView1[j, i].Value = string.Format("{0}:00", (j + 1));
            }
        }

--

当单击某个按钮时,订阅事件处理程序可能是个好主意:

    public Form1()
    {
        InitializeComponent();
        dataGridView1.AllowUserToAddRows = false;
        for (int i = 0; i < 24; i++)
        {
            DataGridViewButtonColumn btnColumn = new DataGridViewButtonColumn();
            btnColumn.HeaderText = string.Format("{0}:00", i+1);
            btnColumn.Name = "dayColumn";
            btnColumn.Width = 40; //set yout width
            dataGridView1.Columns.Add(btnColumn);
        }
        for (int i = 0; i < 7; i++)
        {
            dataGridView1.Rows.Add();
            dataGridView1.Rows[i].HeaderCell.Value = (i + 1).ToString();
            for (int j = 0; j < dataGridView1.Columns.Count; j++)
                dataGridView1[j, i].Value = string.Format("{0}:00", (j + 1));
        }
        dataGridView1.CellClick += new DataGridViewCellEventHandler(dataGridView1_CellClick);
    }

    private void dataGridView1_CellClick(object sender, DataGridViewCellEventArgs e)
    {
        string day = dataGridView1.Rows[e.RowIndex].HeaderCell.Value.ToString();
        string hour = dataGridView1.Columns[e.ColumnIndex].HeaderText.ToString();
        MessageBox.Show("you have clciked on day: " + day + ", hour: " + hour);
    }
于 2012-09-15T13:33:39.890 回答