3.3. Công nghệ WebPart
3.3.5.4. Thi hành Consumer
Viết một consumer Web Part khơng khó hơn việc thiết lập một provider. Ta lặp lại cùng các bước ở trên để thêm vào một consumer Web Part cho dự án. Nếu cả hai Web part chứa trong cùng một Asembly ta cần tạo ra một DWP file thứ hai. Trong trường hợp đơn giản nhất ta chỉ cần cài đè phương thức ảo CellReady và thu về bất cứ giá trị nào mà provider cung cấp và cất dữ các giá trị đó.
Phương thức CellReady thu về một đối tượng CellReadyEventArgs mà trong nó có chứa thuộc tính Cell chỉ đến bất cứ giá trị nào mà provider đã cung cấp trong một tham số đối tượng tương tự trong phương thức PartCommunicationMain của
nó. Thuộc tính Cell có kiểu object, ta cần ép kiểu để chuyển nó về dạng dữ liệu phù hợp trước khi sử dụng.
Consumer cũng có thể muốn kiểm tra xem dữ liệu mà provider đưa ra có hợp khn dạng hay không, để làm điều này ta cần thực thi phương thức
CellProviderInit. Lưu ý ở đây là phương thức này khơng thể bị bỏ qn vì nó là một
phần của giao diện ICellConsumer.
public void CellProviderInit(object sender,
CellProviderInitEventArgs cellProviderInitArgs) {
if (cellProviderInitArgs.FieldName != "EmployeeID") {
throw new NotSupportedException(); }
}
Ở đây lớp CellProviderInitEventArgs đã được điền đầy dữ liệu bởi provider khi provider phát sinh sự kiện CellProviderInit. Sau đây là một đoạn mã chuẩn để làm điều này:
public override void PartCommunicationInit() {
if (CellProviderInit != null) {
CellProviderInitEventArgs cellProviderInitArgs;
cellProviderInitArgs = new CellProviderInitEventArgs(); cellProviderInitArgs.FieldName = "EmployeeID";
cellProviderInitArgs.FieldDisplayName = "Employee ID"; CellProviderInit(this, cellProviderInitArgs);
} }
Thuộc tính FieldName cho biết tên của đối tượng dữ liệu đang được chuyển giao,
dữ liệu này khơng có cú pháp chính xác – nó có thể là bất cứ thứ gì.
Sau đây là một consumer Web Part đơn giản đọc employee ID thông qua kết nối với provider và hiển thị tất cả các hàng được cung cấp trong thuộc tính year tương ứng.
year là một thuộc tính của Web Part mà ta tạo ra, nó là một thuộc tính cơng cộng và
có thể hiển thị được, ta định nghĩa nó như sau:
[Browsable(true),
Category("Miscellaneous"),
Description("Year of selected orders"), DefaultValue(1997),
FriendlyName("Year"),
WebPartStorageAttribute(Storage.Personal)] public int Year
{
get {return _year;} set {_year = value;} }
Employee ID và year là hai tham số được sử dụng trong truy vấn SQL mà kết quả truy vấn được hiển thị thông qua một DataGrid đã được thiết lập để trình bày dữ liệu.
private void BuildUI(HtmlTextWriter writer) {
DataGrid _grid = new DataGrid(); _grid.AutoGenerateColumns = true; _grid.Font.Name = "verdana"; _grid.Font.Size = FontUnit.Point(8); _grid.HeaderStyle.Font.Bold = true; _grid.HeaderStyle.BackColor = Color.PaleTurquoise; _grid.HeaderStyle.HorizontalAlign = HorizontalAlign.Center;
_grid.DataSource = _data; _grid.DataBind();
_grid.RenderControl(writer); }
Hình sau cho thấy hai Web Part làm việc cùng nhau trong một Web Page.
Hai Web Part đã được kết nối với nhau