none
DataGridView 能绑定数组吗 RRS feed

  • 问题

  • 我现在有double[]类型的数组想绑定到DataGridView 上,MSDN上说可以,但就是显示不出来啊
    我心飞翔
    2009年6月5日 3:58

答案

  • 你好,建议把数据保存在DataTable中,然后在Cache中缓存。如果需要DataTable中的某一列,你需要再写些代码,把DataTable中的数据复制一份到数组中,进行其它操作!
    邹俊才
    2009年6月7日 10:16
    版主
  • 你好!
         可以实现的,但是默认是绑定到数组元素的第一个属性的,但是double结构没有这个属性,所以没有显示,可以把double包装
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    
    namespace WindowsApplication1
    {
        public partial class Form10 : Form
        {
            public Form10()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
              
                Item[] items = new Item[] { new Item("1.0"), new Item("2.0"), new Item("3.0") };
    
                this.dataGridView1.DataSource = items;
            }
        }
        class Item
        {
            private string _text;
            public string Text
            {
                get { return _text; }
            }
            public Item(string text)
            {
                this._text = text;
            }
        }
    }
    

    周雪峰
    2009年6月5日 4:43
    版主
  • 你可以通过转换成对象的数组或DataTable 来实现绑定, 不过既然是数组为什么不用 ListBox 或 ComboBox 来显示呢。

    知识改变命运,奋斗成就人生!
    2009年6月5日 9:31
    版主

全部回复

  • 你好!
         可以实现的,但是默认是绑定到数组元素的第一个属性的,但是double结构没有这个属性,所以没有显示,可以把double包装
    using System;
    using System.Collections.Generic;
    using System.ComponentModel;
    using System.Data;
    using System.Drawing;
    using System.Text;
    using System.Windows.Forms;
    
    namespace WindowsApplication1
    {
        public partial class Form10 : Form
        {
            public Form10()
            {
                InitializeComponent();
            }
    
            private void button1_Click(object sender, EventArgs e)
            {
              
                Item[] items = new Item[] { new Item("1.0"), new Item("2.0"), new Item("3.0") };
    
                this.dataGridView1.DataSource = items;
            }
        }
        class Item
        {
            private string _text;
            public string Text
            {
                get { return _text; }
            }
            public Item(string text)
            {
                this._text = text;
            }
        }
    }
    

    周雪峰
    2009年6月5日 4:43
    版主

  • 我明白了,得转化为String格式的吧,刚才试过了。不过呢我有个二维数组,而且数据量很大,能不能给个好的建议,该怎么绑定呢?
    虽然现在我可以将这些数据dgv.Rows[i].Cells[j].Value = data[i,j].ToString();这样将数据输出,可是有个问题不知您能给解决下,就是这样显示完后DataGridView里的数据鼠标一点就没了,而且DataTable dt = (DataTable)dgv.DataSource;获取时dt也是NUll
    谢谢了
    我心飞翔
    2009年6月5日 9:06
  • 〉DataGridView里的数据鼠标一点就没了,而且DataTable dt = (DataTable)dgv.DataSource;获取时dt也是NUll

    这个问题是您对数据绑定和页面生存期不太了解导致的
    你试验下  把数据存到 session 
    在您的按钮点下的最后   重新把session的数据绑定到gridview即可



    紫柔版主的头像真叫萌得一个不行啊。。。。
    2009年6月5日 9:19
    版主
  • 你说的是GridView吧,我这个是C/S下的DataGridView控件,我知道是没有绑定到数据实体,所以获取不到,但也没啥好办法


    我心飞翔
    2009年6月5日 9:24
  • 你可以通过转换成对象的数组或DataTable 来实现绑定, 不过既然是数组为什么不用 ListBox 或 ComboBox 来显示呢。

    知识改变命运,奋斗成就人生!
    2009年6月5日 9:31
    版主
  • 你把二为数组放到DataTable里,然后绑定!
    周雪峰
    2009年6月5日 9:31
    版主
  • 因为我是从数据库取出来大量数据要做数据分析,所以转化为数组便与运算;
    如果把二维数组转换为DataTable不也是的从列到行一个Cell一个Cell的创建吗?这样数据量大话过程还是慢啊


    我心飞翔
    2009年6月5日 9:41
  • 那就直接取数据放到 DataSet里,然后直接绑定,不使用数组了!
    周雪峰
    2009年6月5日 10:23
    版主
  • 大量的话那就cache一下,如果你非要用数组的话,我本身觉得gridview比较适合datatable,用数组还要转换。

    当然gridview本身性能也不是特别好,如果实在量很大的话,建议这样做。

    1.不用数组分析,用存储过程。
    2.用缓存处理结果数据。
    3.自定义gridview进行数据显示。

    低调,低调
    哈哈,书出了,可以点这里购买哦。。
    2009年6月5日 10:24
    版主
  • 你好,建议把数据保存在DataTable中,然后在Cache中缓存。如果需要DataTable中的某一列,你需要再写些代码,把DataTable中的数据复制一份到数组中,进行其它操作!
    邹俊才
    2009年6月7日 10:16
    版主
  • 一步分运算放在SQL语句中,一部分在DATATABLE中直接计算,根据需要把工作量折分,完成后直接绑定,应该会比较快吧
    2009年6月7日 16:05