2013-03-01 68 views
6

Tôi đã tạo một chuỗi các chuỗi 2 chiều và điền vào nó. Tôi cố gắng để ràng buộc nó vào một điều khiển DataGrid như vậy:Làm cách nào để hiển thị nội dung của mảng này bằng cách sử dụng DataGridView?

string[][] Array = new string[100][]; 
dataGridView.DataSource = Array; 

Thay vì xem các nội dung của mảng Tôi thấy các cột sau: Chiều dài, LongLenth, Rank, SyncRoot, IsReadOnly, IsFixedSize, IsSyncrhonized.

Vì vậy, thay vì hiển thị nội dung trong mảng của tôi, nó sẽ hiển thị các thuộc tính của mảng. Tôi đã làm gì sai?

+0

làm thế nào để bạn mong đợi để thấy rằng thông tin vào GV? –

+0

XAML của bạn trông như thế nào đối với điều khiển DataGrid của bạn? – ryrich

+0

Đối với [x] [y] Tôi đã hy vọng mỗi hàng sẽ đại diện cho [X] ... và các cột sẽ đại diện cho [Y], sao cho nội dung của [2] [5] sẽ được hiển thị trên Datagrid trong Hàng thứ 2, 5 cột. – phan

Trả lời

3

Khi bạn cho phép điều khiển lưới tự động tạo cột, về cơ bản nó sẽ liệt kê thông qua các thuộc tính của đối tượng đó và tạo cột cho mỗi đối tượng. Nó không có cách nào để biết rằng bạn muốn hiển thị điều này như là một mạng lưới các giá trị mảng.

Bạn sẽ cần phải tạo một đối tượng mới (chẳng hạn như danh sách liệt kê của một lớp) ra khỏi mảng với các thuộc tính bạn muốn liên kết thành các cột. Một cách nhanh chóng để làm điều này sẽ là sử dụng một loại vô danh, được xây dựng bằng cách sử dụng truy vấn LINQ. Một cái gì đó như:

string[][] Array = new string[100][]; 
for(int i = 0; i < 100; i++) // Set some values to test 
    Array[i] = new string[2] { "Value 1", "Value 2" }; 

dataGridView.DataSource = (from arr in Array select new { Col1 = arr[0], Col2 = arr[1] }); 
Page.DataBind(); 

Ở đây, chúng tôi đang lặp qua tất cả 100 phần tử của mảng. Mỗi phần tử là một mảng gồm 2 chuỗi. Chúng tôi đang tạo một loại ẩn danh trong hai chuỗi đó. Loại này có hai thuộc tính: Col1Col2. Col1 sẽ được đặt thành chỉ mục mảng 0 và Col2 sẽ được đặt thành chỉ mục mảng 1. Sau đó, chúng tôi đang tạo lưới để liệt kê các loại ẩn danh đó. Điều này sẽ giống như thế:

enter image description here

Bạn có thể dĩ nhiên xác định chính xác cách thức các cột sẽ được tạo ra bằng cách thiết lập AutoGenerateColumns False, và dân cư thu Columns. Điều này có thể được thực hiện một cách rõ ràng cũng như trong tệp ASPX của bạn.

2

Bạn cần phải chuyển đổi mảng của bạn vào một DataTable

string[][] Array = new string[100][]; 
DataTable dt= new DataTable(); 

int l= Array.length; 

for(int i=0;i<l;i++) { 
    dt.LoadDataRow(Array[i], true); //Pass array object to LoadDataRow method 
} 

dataGridView.DataSource = dt; 
0

Bạn có thể làm một cái gì đó như thế này

string[][] Array = new string[100][]; 

ArrayList arrList = new ArrayList(); 
for(int i=0;i<100;i++) 
{ 
    arrList.Add(new ListItem(Array[i, 0], Array[i, 1])); 
} 
Grid2D.DataSource = arrList; 
Grid2D.DataBind(); 

Xem liên kết này Binding Arrays to GridView in ASP.Net

0
using Linq; 

var Found = (from arr in myArray2D select 
new { row1 = arr[0], row2 = arr[1], row3 = arr[2] }) 
.Where(y => (y.row1.ToUpper() + y.row2.ToUpper()) 
.Contains(sText.ToUpper())) 
.OrderByDescending(y => Convert.ToInt32(y.row3)).ToList(); 
dataGridViewFind.DataSource = Found; 
dataGridViewFind.AutoResizeColumns(); 
+0

Các lệnh này tìm kiếm văn bản trong cột 1 và 2 của mảng và trả về bằng cách đưa các cột 1, 2 và 3 của mảng và phân loại chúng theo cột 3 được chuyển đổi từ chuỗi thành số. –

Các vấn đề liên quan