C# 如何显示二维数据网格

C# 如何显示二维数据网格,c#,wpf,C#,Wpf,我想设计一个显示数据网格中按钮的界面——每天和24小时。总之,我们将显示:24*7=168个按钮 你知道如何做到这一点吗 我做了一个示例代码来说明它是如何做到的! 此代码仅创建按钮,请查看: 注意:名字按钮你自己的方式,我只做了一个例子 dataGridView1.AllowUserToAddRows = false; for (int i = 0; i < 24; i++) { DataGridViewButtonC

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


你知道如何做到这一点吗

我做了一个示例代码来说明它是如何做到的! 此代码仅创建按钮,请查看: 注意:名字按钮你自己的方式,我只做了一个例子

        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.AllowUserToAddress=false;
对于(int i=0;i<24;i++)
{
DataGridViewButtonColumn btnColumn=新DataGridViewButtonColumn();
btnColumn.HeaderText=string.Format(“{0}:00”,i+1);
btnColumn.Name=“dayColumn”;
btnColumn.Width=40;//设置您的宽度
dataGridView1.Columns.Add(btnColumn);
}
对于(int i=0;i<7;i++)
{
dataGridView1.Rows.Add();
dataGridView1.Rows[i].HeaderCell.Value=(i+1).ToString();
对于(int j=0;j
--

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

    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);
    }
public Form1()
{
初始化组件();
dataGridView1.AllowUserToAddress=false;
对于(int i=0;i<24;i++)
{
DataGridViewButtonColumn btnColumn=新DataGridViewButtonColumn();
btnColumn.HeaderText=string.Format(“{0}:00”,i+1);
btnColumn.Name=“dayColumn”;
btnColumn.Width=40;//设置您的宽度
dataGridView1.Columns.Add(btnColumn);
}
对于(int i=0;i<7;i++)
{
dataGridView1.Rows.Add();
dataGridView1.Rows[i].HeaderCell.Value=(i+1).ToString();
对于(int j=0;j
有一个名为
ITypedList
的框架界面,允许您以数据绑定理解的方式直接指定要为每个组成成员显示的属性

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

  • 实现一个集合类型,该集合类型实现
    ITypedList
  • 对于集合中的每个项,返回一个
    PropertyDescriptor
    ,它封装了行/列对的值
  • 按正常方式将数据绑定到集合
我把它作为一个实验来做,它是有效的,但是为了让一切正常工作,你必须跳出障碍,这是一场噩梦。不过,我通常认为它比直接操纵视图逻辑要好。DataGridView应该足够智能,可以从绑定中推断出它需要做的一切,如果我可以修改绑定目标而不是控件,那就是我喜欢的。

创建24列(DGVButtons),然后添加7行,或者相反。