天天看點

【自然架構】分享 n級關聯下拉清單框

特點:

1、 使用js方法,把需要的資料一次性寫入到頁面裡,然後用js來實作關聯的效果。

2、 支援n級。

3、 封裝成了伺服器控件,是以使用非常簡單。

4、 支援在回發的時候保持狀态。

5、 支援修改記錄的時候設定預設選項。

6、 頁面設定比較靈活。

7、 采用DataSet作為資料的容器。

缺點:

1、 由于是把需要的資料一次性寫入頁面交給用戶端,是以在網速比較慢的時候,顯示頁面需要比較長的時間。

可以改進的地方:

1、 引入json,可以把需要的資料放到單獨的js檔案裡面,這樣可以減少帶寬的壓力。

2、 Ajax,按需所取。每次隻加載需要的資料。

線上示範:

  使用省、市、區縣的資料庫進行示範。由于伺服器的網速很慢,是以需要等待一下,等頁面完全下載下傳完畢之後,才可以使用,否則會出現js腳本錯誤。頁面完全下載下傳完畢之後就沒有js腳本錯誤了。

1、 二級關聯的示範

以省、市關聯為例示範。送出表單後可以保持狀态,可以設定選項。

 protected void Page_Load(object sender, EventArgs e)

        {

            DataAccessLibrary dal = DALFactory.CreateDAL();

            string sql = @"SELECT AreaID AS id, AreaName AS txt FROM Base_Area WHERE (AreaCode LIKE '__0000') 

                            SELECT ParentID,AreaID AS id, AreaName AS txt FROM Base_Area WHERE (AreaCode LIKE '____00') AND (AreaCode NOT LIKE '__0000') ";

            DataSet ds = dal.ExecuteFillDataSet(sql);

            this.lst_Area.DataSource = ds;

            this.lst_Area.DataBind();

        }

        protected void btn_Save_Click(object sender, EventArgs e)

            //送出表單後,擷取關聯下拉清單框的選項值

            //擷取ID

            string itemID = this.lst_Area.SelectedValue;

            this.txt_Value.Text = itemID;

            //擷取text

            string itemText = this.lst_Area.SelectedText;

        protected void btn_SetItemSelect_Click(object sender, EventArgs e)

            //設定下拉清單框的選項

            string itemID = this.txt_SetID.TextTrimNone;

            this.lst_Area.SetSelectedValue(itemID);

2、 三級關聯的示範

以省、市、區縣關聯為例示範。送出表單後可以保持狀态,可以設定選項。

(伺服器的網速有點慢,網頁又有點大,是以需要一點時間下載下傳。)

protected void Page_Load(object sender, EventArgs e)

                            SELECT ParentID,AreaID AS id, AreaName AS txt FROM Base_Area WHERE (AreaCode LIKE '____00') AND (AreaCode NOT LIKE '__0000') 

                            SELECT ParentID,AreaID AS id, AreaName AS txt FROM Base_Area WHERE (AreaCode NOT LIKE '__0000') AND (AreaCode NOT LIKE '____00') ";

與二級關聯的代碼相對比,隻是SQL語句的地方不同,即多了一條SQL語句。其他的都是一樣的。同理,如果是四級的,那麼就在多一條SQL語句。

n級關聯,那麼就需要n條SQL語句。

3、 修改記錄示範

一般在修改記錄的時候,需要根據記錄裡的資訊設定清單框的選項,這裡示範了這種功能。

增加下面這樣的代碼即可。

 if (!Page.IsPostBack)

            {

                //6,568,572 是“遼甯省,撫順市,望花區”對于的ID

                //實際項目中,是從資料庫裡擷取,然後設定,這裡隻是一個執行個體

                this.lst_Area.SetSelectedValue("6,568,572"); 

            }

4、 頁面修飾示範

您看了上面的示範,可呢會覺得幾個下拉清單框挨在一起太難看了,這裡示範如何來做修飾。這個可以在下拉清單框的前面,加上一些修飾。

 protected virtual void SetHTML()

            //一行裡,下拉清單框前面加說明的方法

            string[] html = new string[6];

            html[0] = "省份:";

            html[2] = "城市:";

            html[4] = "區/縣:";

            this.lst_Area.ListHTML = html;

5、 Table形式的表單

在表單裡,如果是table形式的話,一行裡隻想顯示一個清單框,那麼要如何設定呢?

省份、城市、區縣各占一行的形式。

 protected override void SetHTML()

            //多行表格的方法

            html[0] = "";

            html[1] = "</td></tr>";

            html[2] = "<tr><td align=\"right\">城市:</td><td>";

            html[3] = "</td></tr>";

            html[4] = "<tr><td align=\"right\">區/縣:</td><td>";

6、 Div形式的表單

在表單裡,如果是div形式,一行裡隻想顯示一個清單框,那麼又要如何設定呢?

【自然架構】分享 n級關聯下拉清單框

protected override void SetHTML()

            html[1] = "</div>";

            html[2] = "<div class=\"formLeft\">城市:</div><div class=\"formRight\">";

            html[3] = "</div>";

            html[4] = "<div class=\"formLeft\">區/縣:</div><div class=\"formRight\">";

注意:

  由于控件自身并沒有儲存資料,是以每次通路的時候,都需要設定DataSource 屬性,并且需要綁定(DataBind)。這一點和一般的伺服器控件不一樣。

  設定選項的時候,需要在 if (!Page.IsPostBack) 内設定,否則無法得到使用者的選擇。

繼續閱讀