如何显示二维数据网格

时间:2012-09-15 13:13:09

标签: c# wpf

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

知道怎么做到这一点?

2 个答案:

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

答案 1 :(得分:1)

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

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

  • 实现实现ITypedList;
  • 的集合类型
  • 对于集合中的每个项目,返回PropertyDescriptor,其中包含行/列对的值;
  • 正常数据绑定到集合

我做过这个实验并且它有效,但你必须跳过才能让一切正常工作的箍是一场噩梦。不过,我通常认为它比直接操纵视图逻辑更好。 DataGridView足够智能,可以从绑定中推断出它需要做的一切,如果我可以修改绑定目标而不是控件,那就是我更喜欢的。