求教高手WEB PART通信問題
我按照《ASP.NET2.0開發指南》上所述測試WEB PART通信,結果測試靜態連接是OK的,而動態連接卻實現不了。(動態連接 是在REMARK掉STATICCONNECTION代碼段後添加CONNECTIONSZONE組件基礎上測試的。書上說CONNECTIONSZONE可以自動管理,不用編寫任何代碼)
靜態測試畫面
 
 
動態測試畫面
 
(此為為看到謂詞而添加的登陸界面)
 
 
單擊“連接”進入連接模式
 
單擊“通信提供者”謂詞(connection)
 
 
至此,“通信訂閱者”為何沒有呈現呢?為何CONNECTIONSZONE組件提示沒有活動連接呢?請高手指教。
 
下面附上SOURCECODE
通信提供者
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
/// <summary>
/// EmployeesWebPart 的摘要说明
/// </summary>
namespace ConnWebPart
{
    /// <summary>
    /// 創建接口IEmployeeInfo,其中定義屬性EmployeeID
    /// </summary>
    public interface IEmployeeInfo
    {
        int EmployeeID { get;set;}
    }
    public class EmployeesWebPart:WebPart ,IEmployeeInfo 
    {
        /// <summary>
        /// 定義構造函數
        /// </summary>
        public EmployeesWebPart()
        {
            //
            // TODO: 在此处添加构造函数逻辑
            //
            this.Title = "通信提供者";
            this.TitleIconImageUrl = "";        }        //定義私有成員
        private int _empID = 1;
        private TextBox txt;
        private Button btn;
        private AccessDataSource ads;
        private DetailsView dv;        //定義接口IEmployeeInfo成員EmployeeID
        public int EmployeeID
        {
            get { return _empID; }
            set { _empID = value; }
        }        //定義方法ProviderEmployeeInfo,傳送連接數據
        [ConnectionProvider("EmployeeIDProvider", "EmployeeIDProvider")]
        public IEmployeeInfo ProviderEmployeeInfo()
        {
            return this;
        }
        //重寫OnLoad方法,向主控件中添加部分子控件
        protected override void OnLoad(EventArgs e)
        {
            txt = new TextBox();
            txt.Width = Unit.Pixel(30);
            txt.Text = EmployeeID.ToString();
            Controls.Add(txt);            btn = new Button();
            btn.Text = "搜索";
            btn.Click += new EventHandler(OnFindEmployee);
            Controls.Add(btn);
            //base.OnLoad(e);
        }        //呈現控件用戶界面
        protected override void RenderContents(HtmlTextWriter writer)
        {            if (_empID < 1)
            {
                writer.Write("<span style='color:gray'>請在文本框中輸入大於等于1的值。</span>");
                return;
            }
            else
            {
                writer.Write("輸入EmployeeID:");
                txt.RenderControl(writer);
                btn.RenderControl(writer);
                writer.Write("<hr size=1>");
                ads = new AccessDataSource();
                ads.ID = "accessDataSource1";
                ads.DataFile = "~/App_Data/Nwind.mdb";
                ads.SelectCommand = "select EmployeeID,LastName,FirstName,title,notes from employees where employeeid=" + _empID.ToString();
                Controls.Add(ads);                dv = new DetailsView();
                dv.DataSourceID = "accessDataSource1";
                dv.GridLines = GridLines.None;
                dv.CellPadding = 3;
                dv.FieldHeaderStyle.Font.Bold = true;
                Controls.Add(dv);
                dv.RenderControl(writer);            }            //base.RenderContents(writer);
        }        //實現按鈕的事件處理程序
        private void OnFindEmployee(object sender, EventArgs e)
        {
            _empID = Convert.ToInt32(txt.Text);
        }    }
 
}
通信訂閱者
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
/// <summary>
/// OrdersWebPart 的摘要说明
/// </summary>
namespace ConnWebPart
{
    public class OrdersWebPart : WebPart
    {
        /// <summary>
        /// 
        /// </summary>
        
        public OrdersWebPart()
        {
            //
            // TODO: 在此处添加构造函数逻辑
            //
            this.Title = "通信訂閱者";
            this.TitleIconImageUrl = "";        }        private int _empID;
        private GridView gv = new GridView();
        private AccessDataSource ads;        //實現控件用戶界面
        protected override void RenderContents(HtmlTextWriter writer)
        {
            //if (_empID < 1)
            //{
            //    writer.Write("<span style='color:gray'>請在文本框中輸入大於等于1的值</span>");
            //    return;
            //}
            //else
            //{
                ads = new AccessDataSource();
                ads.ID = "accessDataSource1";
                ads.DataFile = "~/App_Data/Nwind.mdb";
                ads.SelectCommand = "select top 8 orderid,customerid,employeeid,orderdate from orders where employeeid=" + _empID.ToString();
                Controls.Add(ads);
                gv = new GridView();
                gv.DataSourceID = "accessDataSource1";
                gv.CellPadding = 3;
                gv.GridLines = GridLines.None;
                gv.BorderWidth = 0;
                Controls.Add(gv);
                gv.RenderControl(writer);            //}
            //base.RenderContents(writer);
        }
        //
        [ConnectionConsumer("EmployeeIDConsumer", "EmployeeIDConsumer")]
        public void GetEmployeeInfo(IEmployeeInfo empInfo)
        {
            if (empInfo != null)
            {
                _empID = empInfo.EmployeeID;
            }
            else
            {
                throw new NotSupportedException("未能連接ACCESS數據庫。");
            }        }    }}
主程序
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;public partial class _Default : System.Web.UI.Page 
{
    protected void Page_Load(object sender, EventArgs e)
    {    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        WebPartManager1.DisplayMode = WebPartManager.BrowseDisplayMode;
    }
    protected void Button2_Click(object sender, EventArgs e)
    {
        WebPartManager1.DisplayMode = WebPartManager.ConnectDisplayMode;
    }
}