none
请问winform中有没有类似表格的控件? RRS feed

  • 问题

  • 想要在窗体中显示一个2维数组的数据,要是web应用中我可以使用table来显示。可是在winform中不知道用什么控件来显示。用GridView一条数据只能一行显示,不太直观。我想要的是:

    ——————————————————————————

    数据1 |20|30|10|60

    数据1 |10|70|60 |60

    数据1 |80|90|50 |60

    ————————————————————————

    这是一条数据

    2010年10月22日 4:41

答案

  • 将数组转换成 List<T> 或 DataTable 进行绑定,也可以通过 DataGridView 直接添加列和行的信息。
    知识改变命运,奋斗成就人生!
    2010年10月22日 5:26
    版主
  • 我虽然没有试成功,不过基本明白你的意思了。不过我想DataGridView 来显示应该不太灵活吧。如果我想两组数据并排显示还可以吗?像下面那样

    ——————————————————————————

    数据1 |20|30|10|60               |            数据2 |55|66|12|56

    数据1 |10|70|60 |60              |            数据2 |88|55|60 |60

    数据1 |80|90|50 |60              |            数据2 |69|35|22|56

    ————————————————————————


    dear
    基本上一个DataGridView只能有一组数据,
    以下是用DataTable处理,主要是用 Merge 合并两个DataTable,因为数据1与数据2的Column都相同,所以不会在另外产生不同的Column,若要达到你要的效果,取不同的Column名称即可。

        Random _Random = new Random();
        private void button25_Click(object sender, EventArgs e)
        {
          DataTable table1 = CreateColumns("数据1");
          dataGridView1.DataSource = table1;
    
          DataTable table2 = CreateColumns("数据2");
          dataGridView2.DataSource = table2;
    
          table1.Merge(table2, true,MissingSchemaAction.Ignore);
          dataGridView3.DataSource = table1;
        }
        DataTable CreateColumns(string Name)
        {
          DataTable table = new DataTable(Name);
          string[] fileds = new string[] { "第一列", "第二列", "第三列" };
          foreach (string item in fileds)
          {
            DataColumn column = new DataColumn();
            column.ColumnName = item;
            table.Columns.Add(column);
          }
          return CreateRow(table);
        }
        DataTable CreateRow(DataTable Table)
        {
          for (int i = 0; i < 3; i++)
          {
            DataRow row = Table.NewRow();
            foreach (DataColumn column in Table.Columns)
            {
              int data = this._Random.Next(1, 100);
              row[column] = data;
            }
            Table.Rows.Add(row);
          }
          return Table;
        }
    


    秘訣無它,唯勤而已
    2010年10月22日 8:09
  • 在 VS 2008 工具栏里有一个!VisualBasic.PowerPacks 分组底下有一个

    DataRepeater 控件,你自己想显示什么就显示什么样子自己拖入有些控件然后绑定!

    http://msdn.microsoft.com/zh-cn/library/cc488279(v=VS.90).aspx 有例子

    弱弱的问一句:这个论坛不是微软的人可以回答问题吧!

    • 已标记为答案 hkstb 2010年10月28日 10:54
    2010年10月22日 15:13

全部回复

  • 你好!

    如 ListView、DataGridView 都可以


    知识改变命运,奋斗成就人生!
    2010年10月22日 4:50
    版主
  • 不太清楚怎么弄,我看DataGridView一条数据只能显示在一行呀。比如有一个2维数组:

    int[,] numArr = new int[,] {
                {20,30,10,60 },
                {10,70,60,60 },
                {80,90,50,60 }
                };

    如何在DataGridView中也2维显示呢?

    2010年10月22日 5:05
  • 将数组转换成 List<T> 或 DataTable 进行绑定,也可以通过 DataGridView 直接添加列和行的信息。
    知识改变命运,奋斗成就人生!
    2010年10月22日 5:26
    版主
  • 我虽然没有试成功,不过基本明白你的意思了。不过我想DataGridView 来显示应该不太灵活吧。如果我想两组数据并排显示还可以吗?像下面那样

    ——————————————————————————

    数据1 |20|30|10|60               |            数据2 |55|66|12|56

    数据1 |10|70|60 |60              |            数据2 |88|55|60 |60

    数据1 |80|90|50 |60              |            数据2 |69|35|22|56

    ————————————————————————

    2010年10月22日 6:09
  • 我虽然没有试成功,不过基本明白你的意思了。不过我想DataGridView 来显示应该不太灵活吧。如果我想两组数据并排显示还可以吗?像下面那样

    ——————————————————————————

    数据1 |20|30|10|60               |            数据2 |55|66|12|56

    数据1 |10|70|60 |60              |            数据2 |88|55|60 |60

    数据1 |80|90|50 |60              |            数据2 |69|35|22|56

    ————————————————————————


    dear
    基本上一个DataGridView只能有一组数据,
    以下是用DataTable处理,主要是用 Merge 合并两个DataTable,因为数据1与数据2的Column都相同,所以不会在另外产生不同的Column,若要达到你要的效果,取不同的Column名称即可。

        Random _Random = new Random();
        private void button25_Click(object sender, EventArgs e)
        {
          DataTable table1 = CreateColumns("数据1");
          dataGridView1.DataSource = table1;
    
          DataTable table2 = CreateColumns("数据2");
          dataGridView2.DataSource = table2;
    
          table1.Merge(table2, true,MissingSchemaAction.Ignore);
          dataGridView3.DataSource = table1;
        }
        DataTable CreateColumns(string Name)
        {
          DataTable table = new DataTable(Name);
          string[] fileds = new string[] { "第一列", "第二列", "第三列" };
          foreach (string item in fileds)
          {
            DataColumn column = new DataColumn();
            column.ColumnName = item;
            table.Columns.Add(column);
          }
          return CreateRow(table);
        }
        DataTable CreateRow(DataTable Table)
        {
          for (int i = 0; i < 3; i++)
          {
            DataRow row = Table.NewRow();
            foreach (DataColumn column in Table.Columns)
            {
              int data = this._Random.Next(1, 100);
              row[column] = data;
            }
            Table.Rows.Add(row);
          }
          return Table;
        }
    


    秘訣無它,唯勤而已
    2010年10月22日 8:09
  • 在 VS 2008 工具栏里有一个!VisualBasic.PowerPacks 分组底下有一个

    DataRepeater 控件,你自己想显示什么就显示什么样子自己拖入有些控件然后绑定!

    http://msdn.microsoft.com/zh-cn/library/cc488279(v=VS.90).aspx 有例子

    弱弱的问一句:这个论坛不是微软的人可以回答问题吧!

    • 已标记为答案 hkstb 2010年10月28日 10:54
    2010年10月22日 15:13
  • 非常感谢“肖小勇”、“余小章”、“曲滨卐銘龘鶽”三位的热心帮助,“余小章”讲的让我对DataTable又有了深入的了解,谢谢。“曲滨卐銘龘鶽”比较靠近我的要求。我在asp.net中一直使用Repeater控件来显示数据,但是好像使用方法不太一样,还在研究中,目前只能使用数据源绑定,还不知道怎么搬动绑定。

    既然BoberSong 版主结贴了,我只能等我研究透了再把代码发上来吧。

    2010年10月28日 11:04