天天看點

MDataTable屬性RecordsAffected新應用:WebService與Json互動的記錄總數

一:事出總有因:

1:需要來源:

最近有網友給我問了一個需求功能,大體需要功能如下: 

1:有一台伺服器,以webservice或wcf方式提供資料。

2:有用戶端(web或winform),調用遠端webservice或wcf的資料,然後綁定顯示表格資料,關鍵還需要帶有分頁功能。

2:解決方案: 

1:webservice 端:通過maction,查詢出表(mdatatable),再調用tojson傳回json輸出。

2:用戶端:通過調用調用遠端的方法,接收傳回的json字元串,然後用mdatatable.loadfromjson方法,加載還原為表格,然後綁定到清單控件即可。

3:分頁控件:http://www.cnblogs.com/cyq1162/category/259559.html

方法很簡單,由于需要傳回記錄總數,是以可以傳回“記錄總數,json“,然後接收後再分隔一下。

3:方案更新:

簡單無極限,我想到了還可以再簡單些的方式: 

我掃了下mdatatable,由于繼續自idatareader,是以有幾個屬性,好像派不上用場,存在也像是個浪費。

其中一個是:recordsaffected,意思是受影響的記錄總數,通常這個值預設為-1,99.9999%用不上。

為了使使用更簡單,本人進行了以下的改進:

1:把調用select分頁查詢後,把記錄總數指派給mdatatalle屬性recordsaffected。

2:對于tojson方法輸出,把記錄總數也一并集在json中。

3:mdatatable.loadfromjson時,可以還原記錄總數到recordsaffected屬性。

有了以上改進,直接傳回json即可,還原時也可以從recordsaffected拿回記錄總數,綁定到分頁。

二:代碼示例:

花了些時間,寫了一個demo:

1:解決方案: 

MDataTable屬性RecordsAffected新應用:WebService與Json互動的記錄總數

2:界面html:

MDataTable屬性RecordsAffected新應用:WebService與Json互動的記錄總數

3:webservice的代碼示例:

為了友善,這裡用了文本資料庫示例:

MDataTable屬性RecordsAffected新應用:WebService與Json互動的記錄總數

namespace myservice

{

    /// <summary>

    /// usersservice 的摘要說明

    /// </summary>

    [webservice(namespace = "http://tempuri.org/")]

    [webservicebinding(conformsto = wsiprofiles.basicprofile1_1)]

    [toolboxitem(false)]

    public class usersservice : system.web.services.webservice

    {

        [webmethod]

        public string gettablejson(int pageindex, int pagesize)

        {

            createrow(pageindex);

            mdatatable dt;

            using (users u = new users())

            {

                int count = 0;

                dt = u.select(pageindex, pagesize, “id>1", out count);

            }

            return dt.tojson();

        }

        //産生表的資料

        private void createrow(int index)

            if (index == 1)

                using (users u = new users())

                {

                    for (int i = 0; i < 30; i++)

                    {

                        u.username = i.tostring();

                        u.createtime = datetime.now;

                        u.insert();

                    }

                }

    }

    //為了省事,這裡采用文本資料庫做為示例。

    public class users : cyq.data.orm.ormbase

        public users()

            base.setinit(this, "users", "txt path={0}");

        private int _id;

        public int id

            get

                return _id;

            set

                _id = value;

        private string _username;

        public string username

                return _username;

                _username = value;

        private datetime _createtime;

        public datetime createtime

                return _createtime;

                _createtime = value;

}

MDataTable屬性RecordsAffected新應用:WebService與Json互動的記錄總數

4:web界面的代碼:

MDataTable屬性RecordsAffected新應用:WebService與Json互動的記錄總數

namespace web

    public partial class _default : system.web.ui.page

        protected void page_load(object sender, eventargs e)

            if (!ispostback)

                loaddata();

        public void loaddata()

            myservice.usersservice us = new myservice.usersservice();

            string json= us.gettablejson(pager1.pageindex, pager1.pagesize);

            mdatatable dt = mdatatable.loadfromjson(json);

            dt.bind(gvusers);

            pager1.count = dt.recordsaffected;

            pager1.bindname = "loaddata";

MDataTable屬性RecordsAffected新應用:WebService與Json互動的記錄總數

最終簡單的效果圖:

MDataTable屬性RecordsAffected新應用:WebService與Json互動的記錄總數
MDataTable屬性RecordsAffected新應用:WebService與Json互動的記錄總數