zoukankan      html  css  js  c++  java
  • 如何将数组类型绑定到DataGridView控件

    DataGridView控件的DataSource有以下几个类型:

    DataGridView 类支持标准的 Windows 窗体数据绑定模型。这意味着数据源可以是实现下列接口之一的任何类型:

    • IList 接口,包括一维数组。
    • IListSource 接口,例如,DataTable 和 DataSet 类。
    • IBindingList 接口,例如,BindingList 类。
    • IBindingListView 接口,例如,BindingSource 类。

    数组如果直接绑定到DataGridView控件,会并不见得得到你想要的结果。下面是一个示例代码:

    private void button2_Click(object sender, EventArgs e)
            {
                int[] intArr = new int[100];
                ArrayList myList = new ArrayList();
    
    
                // Generate 100 different numbers
                Random rnd = new Random();
                while (myList.Count < 100)
                {
                    int num = rnd.Next(1, 101);
                    if (!myList.Contains(num))
                        myList.Add(num);
                }
    
                for (int i = 0; i < 100; i++)
                    intArr[i] = (int)myList[i];
    
                this.dataGridView1.DataSource = intArr;            
            }
    

    运行这段代码,不会报错,但是DataGridView并不显示intArr数组里面的100个不同数字,而是什么都没有。

    这里有三个常用的方法可以把intArr的数据显示到DataGridView里。

    1. 把数据放入到一个DataTable里面。

    private void button2_Click(object sender, EventArgs e)
            {
                int[] intArr = new int[100];
                ArrayList myList = new ArrayList();
    
    
                // Generate 100 different numbers
                Random rnd = new Random();
                while (myList.Count < 100)
                {
                    int num = rnd.Next(1, 101);
                    if (!myList.Contains(num))
                        myList.Add(num);
                }
    
                for (int i = 0; i < 100; i++)
                    intArr[i] = (int)myList[i];
    
                DataTable dt = new DataTable();
                DataColumn dc = new DataColumn("Number");
                dt.Columns.Add(dc);
                foreach (int s in intArr)
                {
                    dt.Rows.Add(s);
                }
    
                this.dataGridView1.DataSource = dt;
            }
    

    下面是运行结果:

    image

    因为DataSource绑的是对象属性,所以利用包装容器类,建一个对象数组也可以达到目的。

            protected class Item
            {
                private int test_value;
    
                public Item(int Value)
                {
                    this.test_value = Value;
                }
                public int Value
                {
                    get { return test_value; }
                    set { test_value = value; }
                }
    
            }
    
            private void button2_Click(object sender, EventArgs e)
            {
                int[] intArr = new int[100];
                ArrayList myList = new ArrayList();
    
    
                // Generate 100 different numbers
                Random rnd = new Random();
                while (myList.Count < 100)
                {
                    int num = rnd.Next(1, 101);
                    if (!myList.Contains(num))
                        myList.Add(num);
                }
    
                for (int i = 0; i < 100; i++)
                    intArr[i] = (int)myList[i];
    
                Item[] itemArr = new Item[100];
                for (int i = 0; i < 100; i++)         
                    itemArr[i] = new Item(intArr[i]);
                      
                this.dataGridView1.DataSource = itemArr;
    
            }
    

    上面的Item类就是一个包装容器类。 代码运行的结果

    image

    这种方法对应的最简单。直接对应的把数组里面的每个元素转换成一个数组类显示

     private void button2_Click(object sender, EventArgs e)
            {
                int[] intArr = new int[100];
                ArrayList myList = new ArrayList();
    
    
                // Generate 100 different numbers
                Random rnd = new Random();
                while (myList.Count < 100)
                {
                    int num = rnd.Next(1, 101);
                    if (!myList.Contains(num))
                        myList.Add(num);
                }
    
                for (int i = 0; i < 100; i++)
                    intArr[i] = (int)myList[i];
    
                this.dataGridView1.DataSource = (from Number in intArr select new { Number }).ToArray();
            }
    

    这是运行结果图,Number就是列名

    image

    当然肯定还有其他的方法来实现,这里只是举三个例子作为一个常用的方法。

    伪python爱好者,正宗测试实践者。
  • 相关阅读:
    jsp 特殊标签
    poj 1753 Flip Game 高斯消元 异或方程组 求最值
    zoj 3155 Street Lamp 高斯消元 异或方程组 求方案数
    poj1222 EXTENDED LIGHTS OUT 高斯消元解异或方程组 模板
    zoj 3930 Dice Notation 模拟
    zoj 3157 Weapon 线段树求逆序对数
    hdu 1242 Rescue BFS+优先队列
    hdu 3466 Proud Merchants 贪心+01背包
    zoj 3689 Digging 贪心+01背包
    hdu 2602 Bone Collector 01背包模板
  • 原文地址:https://www.cnblogs.com/herbert/p/1808381.html
Copyright © 2011-2022 走看看