2010-02-17 42 views
9

Làm cách nào để tự động chèn điều khiển trước một điều khiển khác trong asp.net. Cho phép nói control1 là một số điều khiển trên trang web và tôi muốn tự động tạo và chèn bảng ngay trước control1.Chèn điều khiển trước một điều khiển khác

ví dụ:

table1 = new Table(); 
table1.ID = "Table1"; 

nhưng điều gì sẽ xảy ra tiếp theo? Để thêm một điều khiển như một đứa trẻ tôi sẽ làm: control1.Controls.Add(table1); nhưng làm thế nào trên trái đất để tôi chèn table1 như anh chị em trước của control1?

Trả lời

16

Nếu bạn muốn kiểm soát mới (controlB) để ngay trước controlA, bạn có thể xác định các chỉ số của controlA trong bộ sưu tập Page.Controls, và chèn controlB tại địa điểm đó. Tôi tin rằng điều này sẽ bump controlA chuyển tiếp bởi một chỉ mục, làm cho họ anh chị em ngay lập tức như mong muốn.

if(Page.Controls.IndexOf(controlA) >= 0) 
    Page.Controls.AddAt(Page.Controls.IndexOf(controlA), controlB); 

Edit:

Một lưu ý hơn nữa - những giả định trên kiểm soát A và B là ở cấp độ trang gốc. Bạn cũng có thể sử dụng Parent tài sản để đảm bảo việc đưa anh chị em làm việc bất cứ đâu controlA nằm trong hệ thống phân cấp trang:

Control parent = controlA.Parent; 

if(parent != null && parent.Controls.IndexOf(controlA) >= 0) 
{ 
    parent.Controls.AddAt(parent.Controls.IndexOf(controlA), controlB); 
} 

Tôi thực sự muốn phương pháp này vì nó là linh hoạt hơn và không dựa trên Page.

+0

Cảm ơn, hữu ích nhất. –

+2

Bạn sẽ gọi sự kiện này ở sự kiện nào? Bởi vì tôi luôn nhận được Bộ sưu tập kiểm soát không thể sửa đổi trong các giai đoạn DataBind, Init, Load, PreRender hoặc Unload. –

0

Bạn đã thử control1.Controls.AddAt(0, table1)? Loại lẻ họ không gọi phương thức Chèn giống như hầu hết các loại sưu tập khác.

+0

Không kiểm soát1.Control là các điều khiển con của control1? Tôi cần chèn ngay trước control1, trên cùng cấp. –

+0

Rất tiếc! Xin lỗi tôi hiểu lầm. Hình như bạn đã tìm thấy một giải pháp mặc dù. –

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