当前位置:编程学习 > C#/ASP.NET >>

求DataGridView一次性添加字符串类型的数组为行的方法

如题,比如一个DataGridView中有3个列,然后有三个分别对应这三列的数据的字符串类型的数组x1、x2、x3,下标上限同为10000,求一次性把它们添加进去的办法。。。
我现在是这样添加的,但因为数据量很大,全部添加完效率非常低,所以求一次性添加的办法。。。

for i=0 to UBound(x1)
DataGridView1.Rows.Add(x1(i), x2(i), x3(i))
next

DataGridView1.DataSource=和DataGridView1直接用=赋值我尝试了一晚上都始终不得要领,不知道赋值给它们的变量要如何构建。 --------------------编程问答--------------------
Dim list = Enumerable.Range(0, UBound(x1)).Select(Function(x) New With { .x1 = x1(x), .x2 = x2(x), .x3 = x3(x) }).ToList()
DataGridView1.DataSource = list
--------------------编程问答--------------------
引用 1 楼 caozhy 的回复:
Dim list = Enumerable.Range(0, UBound(x1)).Select(Function(x) New With { .x1 = x1(x), .x2 = x2(x), .x3 = x3(x) }).ToList()
DataGridView1.DataSource = list


谢谢,Enumerable应该是System.Linq的成员吧?我改成framework4.5后Enumerable能通过了,但是后面Select提示:
错误 “Select”不是“System.Collections.Generic.IEnumerable(Of Integer)”的成员。 --------------------编程问答--------------------
引用 2 楼 killpigboy 的回复:
Quote: 引用 1 楼 caozhy 的回复:

Dim list = Enumerable.Range(0, UBound(x1)).Select(Function(x) New With { .x1 = x1(x), .x2 = x2(x), .x3 = x3(x) }).ToList()
DataGridView1.DataSource = list


谢谢,Enumerable应该是System.Linq的成员吧?我改成framework4.5后Enumerable能通过了,但是后面Select提示:
错误 “Select”不是“System.Collections.Generic.IEnumerable(Of Integer)”的成员。

.NET 3.5就支持LINQ啊。 --------------------编程问答--------------------
引用 3 楼 caozhy 的回复:
Quote: 引用 2 楼 killpigboy 的回复:

Quote: 引用 1 楼 caozhy 的回复:

Dim list = Enumerable.Range(0, UBound(x1)).Select(Function(x) New With { .x1 = x1(x), .x2 = x2(x), .x3 = x3(x) }).ToList()
DataGridView1.DataSource = list


谢谢,Enumerable应该是System.Linq的成员吧?我改成framework4.5后Enumerable能通过了,但是后面Select提示:
错误 “Select”不是“System.Collections.Generic.IEnumerable(Of Integer)”的成员。

.NET 3.5就支持LINQ啊。


3.5也是提示错误 “Select”不是“System.Collections.Generic.IEnumerable(Of Integer)”的成员。 --------------------编程问答-------------------- 老大的做法   就是填充一个  list 然后 进行 DataSource 绑定   这样 效率会很高


不过像我这样生活在 2.0的人 一般用 datatable   --------------------编程问答--------------------
引用 5 楼 xiaobingking 的回复:
老大的做法   就是填充一个  list 然后 进行 DataSource 绑定   这样 效率会很高


不过像我这样生活在 2.0的人 一般用 datatable  

有原文吗,发来参观一下 --------------------编程问答--------------------
引用 5 楼 xiaobingking 的回复:
老大的做法   就是填充一个  list 然后 进行 DataSource 绑定   这样 效率会很高


不过像我这样生活在 2.0的人 一般用 datatable  

我看了下微软的实例,貌似这个得添加列才能DataSource啊? --------------------编程问答--------------------
引用 7 楼 killpigboy 的回复:
Quote: 引用 5 楼 xiaobingking 的回复:

老大的做法   就是填充一个  list 然后 进行 DataSource 绑定   这样 效率会很高


不过像我这样生活在 2.0的人 一般用 datatable  

我看了下微软的实例,貌似这个得添加列才能DataSource啊?


不需要  可以自动添加   列标题 就是  datatable的列标题

当然  如果你要求多   那就需要  提前  准备 DataGridView1  的列 --------------------编程问答--------------------
引用 8 楼 xiaobingking 的回复:
Quote: 引用 7 楼 killpigboy 的回复:

Quote: 引用 5 楼 xiaobingking 的回复:

老大的做法   就是填充一个  list 然后 进行 DataSource 绑定   这样 效率会很高


不过像我这样生活在 2.0的人 一般用 datatable  

我看了下微软的实例,貌似这个得添加列才能DataSource啊?


不需要  可以自动添加   列标题 就是  datatable的列标题

当然  如果你要求多   那就需要  提前  准备 DataGridView1  的列

我是说这个貌似必须要对datatable添加列啊,我DataGridView的列属性有点复杂,重新给datatable赋值这些属性太麻烦了,我只想用一个变量储存行的数据,然后DataSource或赋值给DataGridView,列数据自动以DataGridView为准就OK。 --------------------编程问答--------------------
引用 8 楼 xiaobingking 的回复:
Quote: 引用 7 楼 killpigboy 的回复:

Quote: 引用 5 楼 xiaobingking 的回复:

老大的做法   就是填充一个  list 然后 进行 DataSource 绑定   这样 效率会很高


不过像我这样生活在 2.0的人 一般用 datatable  

我看了下微软的实例,貌似这个得添加列才能DataSource啊?


不需要  可以自动添加   列标题 就是  datatable的列标题

当然  如果你要求多   那就需要  提前  准备 DataGridView1  的列


我想先把DatagridView的列属性赋值给datatable,然后再向它添加行数据,代码如下,但第二行copyto这里报错“源数组中至少有一个元素未能被向下转换到目标数组类型。”,意思应该是DatagridView的列数据不能被放到类型为DataColumn的数组中,那数组类型该是啥呢。。。。

        Dim temp(3) As DataColumn
        DatagridView1.Columns.CopyTo(temp, 0)
        Dim list As DataTable = New DataTable()
        list.Columns.AddRange(temp)
        list.Rows.Add("test", "123", "dasd", "zxc")
        DatagridView1.DataSource = list
--------------------编程问答--------------------
 '新建一个datatable用于保存读入的数据
        Dim list As New DataTable()
        '给datatable添加三个列
        list.Columns.Add(New DataColumn("aa", System.Type.GetType("System.String")))
        list.Columns.Add(New DataColumn("bb", System.Type.GetType("System.String")))
        list.Columns.Add(New DataColumn("cc", System.Type.GetType("System.String")))
        '读入文件
        Dim reader As New StreamReader("1.txt", Encoding.Default)

        '循环读取所有行
        While (Not reader.EndOfStream)
            '将每行数据,用-分割成3段
            Dim data As String() = reader.ReadLine.Split(" ")
            '每行数据之间一个空格 
            '新建一行,并将读出的数据分段,分别存入对应的列中,有几列建立几个
            Dim dr As DataRow = list.NewRow
            dr(0) = data(0)
            dr(1) = data(1)
            dr(2) = data(2)
            '将这行数据加入到datatable中
            list.Rows.Add(dr)

        End While
        '将datatable绑定到datagridview上显示结果()
        DataGridView1.DataSource = list
--------------------编程问答--------------------
引用 11 楼 wind_cloud2011 的回复:
 '新建一个datatable用于保存读入的数据
        Dim list As New DataTable()
        '给datatable添加三个列
        list.Columns.Add(New DataColumn("aa", System.Type.GetType("System.String")))
        list.Columns.Add(New DataColumn("bb", System.Type.GetType("System.String")))
        list.Columns.Add(New DataColumn("cc", System.Type.GetType("System.String")))
        '读入文件
        Dim reader As New StreamReader("1.txt", Encoding.Default)

        '循环读取所有行
        While (Not reader.EndOfStream)
            '将每行数据,用-分割成3段
            Dim data As String() = reader.ReadLine.Split(" ")
            '每行数据之间一个空格 
            '新建一行,并将读出的数据分段,分别存入对应的列中,有几列建立几个
            Dim dr As DataRow = list.NewRow
            dr(0) = data(0)
            dr(1) = data(1)
            dr(2) = data(2)
            '将这行数据加入到datatable中
            list.Rows.Add(dr)

        End While
        '将datatable绑定到datagridview上显示结果()
        DataGridView1.DataSource = list

谢谢,这个我知道,但关键是我DatagridView1的列数据很复杂,怎么才能让DataGridView1.DataSource = list之后自动以DataGridView1的列数据为准。或者怎么把DataGridView1的列数据完整赋值给list(这一步我折腾了半天都不对,DatagridView1.Columns.CopyTo(temp, 0)这里怎么整都过不去,提示至少有一个元素类型转换失败。) --------------------编程问答-------------------- 再想想办法,总能找到方法, --------------------编程问答-------------------- 多试下就知道了
补充:.NET技术 ,  VB.NET
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,