2012-04-11 30 views
7

Tôi đang làm việc trên một ứng dụng C# có chứa rất nhiều DataGridViews trống. Người dùng phải điền chúng với dữ liệu sao chép/dán từ excel. Những gì tôi làm là như sau:Datagridview.SelectedCells order

int i = 0; 
string s = Clipboard.GetText(); 

// Separate lines 
string[] lines = Regex.Split(s, "\r\n"); 
foreach (string line in lines) 
{ 
    // Separate each cell 
    string[] cells = line.Split('\t'); 
    foreach (string cell in cells) 
    { 
     // If we selected as many cells as copied 
     if (dataGridView.SelectedCells.Count == (lines.Length-1)*(cells.Length)) 
     { 
      dataGridView.SelectedCells[i].Value = cell; 
      i++; 
     } 
    } 
} 

Vấn đề là nếu tôi sao chép một cái gì đó như thế này (trên excel):

1 2 3 
4 5 6 

datagridview của tôi sẽ giống như sau:

6 4 2 
5 3 1 

tôi không thực sự biết phải làm gì để sửa lỗi này ... Cảm ơn trước

+0

Bất kỳ cơ hội nào bạn có thể tạo một datatable với mảng ô và ràng buộc dữ liệu vào DataGrid? – ray

+0

@RayMoonDay Tôi không biết nếu đó là một giải pháp tốt xem xét tôi đã có như 50 lưới động được tạo ra, tôi không thực sự vào sử dụng bộ nhớ vì vậy tôi không biết nếu nó lớn hay không. Tôi sẽ cố gắng này ra anyway, cảm ơn bạn. – Blowi

+0

Tại sao bạn có thể cần 50 ô trống? Tuy nhiên, nếu bạn chỉ có thể in biến 's' là bản sao của clipboard, bạn có thể có ý tưởng nếu t khớp với đầu ra của bạn hoặc thứ tự dữ liệu excel thực – ray

Trả lời

1

Thay thế

dataGridView.SelectedCells[i].Value = cell;

với

dataGridView.SelectedCells[(dataGridView.SelectedCells.Count-1) - i].Value = cell;

+0

Đây là một sửa chữa đơn giản bởi vì nếu tôi chọn từ dưới cùng bên phải Dù sao người dùng sẽ phải cẩn thận, cảm ơn :) – Blowi

2
  1. Chuyển đổi dữ liệu vào clipboard của bạn vào một mảng 2 chiều. Nhớ chiều dài của mỗi chiều.
  2. Lặp lại qua các ô đã chọn và tìm các ô trên cùng bên trái và dưới cùng bên phải. Từ đó bạn có thể xác định nó có kích thước phù hợp.
  3. Sử dụng vòng lặp kép, ánh xạ dữ liệu khay nhớ tạm của bạn từ vị trí mảng trực tiếp đến phối hợp ô (không sử dụng ô đã chọn) bằng cách sử dụng phối hợp ô dự phòng làm bù.

Hoặc, thay vì mảng 2 chiều, bạn có thể tạo Danh sách lớp/cấu trúc nhỏ chứa thuộc tính Hàng, Cột và Giá trị. Sau đó, chỉ cần lặp qua đó thay vì vòng lặp đôi.

+0

Tôi nghĩ về điều đó và thực sự đã thử nó (nhưng cách khác xung quanh, bằng cách phân loại các tế bào được chọn trong một danh sách và vòng lặp), cảm ơn bạn quá :) – Blowi