1. #81
    Ext User
    Join Date
    Aug 2007
    Posts
    33
    Vote Rating
    0
    magunes117 is on a distinguished road

      0  

    Default Using LiveGrid w/MSSQL, .NET and Jayrock

    Using LiveGrid w/MSSQL, .NET and Jayrock


    Hi all,

    Thorsten, great component, thx.

    I am using .net/mssql instead of php/mysql, so I modified your example for this purpose, and here is how to make it work:

    Server Side: test.ashx
    Code:
    [JsonRpcMethod("liveGrid", Idempotent = true)]
            [JsonRpcHelp("LiveGrid Test")]
            public Dictionary<string, object> LiveGrid(int start, int limit, string sort, string dir)
            {
                using (OleDbConnection connection = new OleDbConnection("Provider=SQLOLEDB;Data Source=datasource;Initial Catalog=initcatalog;User Id=user;Password=password;"))
                {
                    connection.Open();
                    string sql = "SELECT * FROM ORDERS ORDER BY " + sort + " " + dir;
                    OleDbCommand command = new OleDbCommand(sql, connection);
                    OleDbDataReader reader = command.ExecuteReader(CommandBehavior.CloseConnection);
    
                    DataTable resultSet = new DataTable();
    
                    for (int i = 0; i < reader.FieldCount; i++)
                    {
                        resultSet.Columns.Add(reader.GetName(i), reader.GetFieldType(i));
                    }
    
                    DataRow[] dr = new DataRow[300];
    
                    for (int i = 0; i < start && reader.Read(); i++);
    
                    for (int i = 0; i < limit && reader.Read(); i++)
                    {
                        dr[i] = resultSet.NewRow();
    
                        for (int j = 0; j < resultSet.Columns.Count; j++)
                        {
                            dr[i][j] = reader.GetValue(j);
                        }
                        resultSet.Rows.Add(dr[i]);
                    }
    
                    command.Cancel();			
                    reader.Close();
                    connection.Close();
    
                    connection.Open();
                    string csql = "SELECT COUNT(*) FROM ORDERS";
                    OleDbCommand ccommand = new OleDbCommand(csql, connection);
                    OleDbDataReader creader = ccommand.ExecuteReader(CommandBehavior.CloseConnection);
                    creader.Read();
                    int total = (int)creader.GetValue(0);
    
                    creader.Close();
                    connection.Close();
    
                    Dictionary<string, object> ret = new Dictionary<string, object>();
                    ret["total"] = total;
                    ret["version"] = 1;
                    ret["data"] = resultSet.DefaultView;
                    return ret;
                }
            }
    Client Side: index.html
    Code:
    ...
    
    <script type="text/javascript" src="test.ashx?proxy&v=2"></script>
    
    ...
    
    Ext.onReady(function(){
    
    	var bufferedReader = new Ext.ux.data.BufferedJsonReader({
            root            : 'result.data',
            versionProperty : 'result.version',
            totalProperty   : 'result.total',
            id              : 'id'
          }, [ {
             name : 'OrderID', sortType : 'int'
          },{
             name : 'CustomerID', sortType : 'string'
          },{
             name : 'EmployeeID',   sortType : 'int'
          },{
             name : 'OrderDate', sortType : 'int'
          },{
             name : 'RequiredDate',   sortType : 'int'
          },{
             name : 'ShippedDate', sortType : 'int'
          },{
             name : 'ShipVia',   sortType : 'int'
          },{
             name : 'Freight', sortType : 'string'
          },{
             name : 'ShipName',   sortType : 'string'
          },{
             name : 'ShipAddress', sortType : 'string'
          },{
             name : 'ShipCity',   sortType : 'string'
          },{
             name : 'ShipRegion', sortType : 'string'
          },{
             name : 'ShipPostalCode',   sortType : 'string'
          },{
             name : 'ShipCountry', sortType : 'string'
        }]);
    
    Ext.JsonRpcProxy = function(jsonRpcProxy, listMethod) 
    {
        var _jsonRpcProxy = null ; 
        var _listMethod = null;
     
        Ext.JsonRpcProxy.superclass.constructor.call(this);        
     
        this.load = function(params, reader, callback, scope, arg) {
            _jsonRpcProxy[listMethod] (params.start, params.limit, params.sort, params.dir, this.loadResponse.createDelegate(this, [reader, callback, scope, arg], true ) 
            ).call(Ext.JsonRpcProxy.ext_channel1); 
        }
     
        this.loadResponse = function(response, reader, callback, scope, arg) {
            var result;
            result = reader.read(response) ;
            callback.call(scope||this, result, arg, true) ;
        }
     
        this.setRpcProxy = function(jsonRpcProxy, listMethod)  {
            if (jsonRpcProxy)
                _jsonRpcProxy = jsonRpcProxy.rpc || jsonRpcProxy ;
            _listMethod = listMethod || "list"  ; 
        }    
        this.setRpcProxy(jsonRpcProxy, listMethod) ;    
    } ;
     
    Ext.JsonRpcProxy.ext_channel1 = function(call)
    {
        if (typeof(call.callback) !== 'function')
            throw new Error("The EXT channel does not support synchronous methods.");        
        call.yuiconn = Ext.Ajax.request (
            {
                url: call.url , 
                params: {"JSON-RPC": Ext.util.JSON.encode(call.request)} , 
                success: function(response, options) {
                        call.callback(response) ;
                    },                            
                failure: function(response, options) {
                        call.callback({xhr:response}); 
                    }   
            }
        );
        return call ; 
    } ;
      
    Ext.extend(Ext.JsonRpcProxy, Ext.data.DataProxy, {
    }) ;
    
        var bufferedDataStore = new Ext.ux.grid.BufferedStore({
            autoLoad   : true,
            bufferSize : 300,
    		proxy	   : new Ext.JsonRpcProxy(Test.rpc, "liveGrid"),
    		sortInfo   : {field: 'OrderID', direction: 'ASC'},
            reader     : bufferedReader
        });
     
        var bufferedView = new Ext.ux.grid.BufferedGridView({
                nearLimit      : 100,
                loadMask : {
                    msg : 'Please wait...'
        }});          
            
        var bufferedGridToolbar = new Ext.ux.BufferedGridToolbar({
            view        : bufferedView,
            displayInfo : true
        });
    
        var bufferedSelectionModel = new Ext.ux.grid.BufferedRowSelectionModel();        
        
        var colModel = new Ext.grid.ColumnModel([
            {header: "OrderID", align : 'left',   width: 160, sortable: true, dataIndex: 'OrderID'},
            {header: "CustomerID", align : 'left',   width: 160, sortable: true, dataIndex: 'CustomerID'},
            {header: "EmployeeID", align : 'left',   width: 160, sortable: true, dataIndex: 'EmployeeID'},
            {header: "OrderDate", align : 'left',   width: 160, sortable: true, dataIndex: 'OrderDate'},
            {header: "RequiredDate", align : 'left',   width: 160, sortable: true, dataIndex: 'RequiredDate'},
            {header: "ShippedDate", align : 'left',   width: 160, sortable: true, dataIndex: 'ShippedDate'},
            {header: "ShipVia", align : 'left',   width: 160, sortable: true, dataIndex: 'ShipVia'},
            {header: "Freight", align : 'left',   width: 160, sortable: true, dataIndex: 'Freight'},
            {header: "ShipName", align : 'left',   width: 160, sortable: true, dataIndex: 'ShipName'},
            {header: "ShipAddress", align : 'left',   width: 160, sortable: true, dataIndex: 'ShipAddress'},
            {header: "ShipCity", align : 'left',   width: 160, sortable: true, dataIndex: 'ShipCity'},
            {header: "ShipRegion", align : 'left',   width: 160, sortable: true, dataIndex: 'ShipRegion'},
            {header: "ShipPostalCode", align : 'left',   width: 160, sortable: true, dataIndex: 'ShipPostalCode'},
            {header: "ShipCountry", align : 'left',   width: 160, sortable: true, dataIndex: 'ShipCountry'}
        ]);
    
        var grid = new Ext.grid.GridPanel({
            ds             : bufferedDataStore,
            enableDragDrop : false,
            cm             : colModel,
            sm             : bufferedSelectionModel,
            loadMask       : {
                msg : 'Loading...'
            },
            view           : bufferedView,
            title          : 'Test',
            bbar           : bufferedGridToolbar
        });
        
        var w = new Ext.Window({
            title       : 'LiveGrid',
            maximizable : true,
            resizable   : true,
            layout      : 'fit',
            items       : [grid],
            height      : 480,
            width       : 600
        });
        
        w.show();
            
    });
    Table Structure: orders
    Code:
    CREATE TABLE ORDERS (
    	"OrderID" "int" IDENTITY (1, 1) NOT NULL ,
    	"CustomerID" nchar (5) NULL ,
    	"EmployeeID" "int" NULL ,
    	"OrderDate" "datetime" NULL ,
    	"RequiredDate" "datetime" NULL ,
    	"ShippedDate" "datetime" NULL ,
    	"ShipVia" "int" NULL ,
    	"Freight" "money" NULL DEFAULT (0),
    	"ShipName" nvarchar (40) NULL ,
    	"ShipAddress" nvarchar (60) NULL ,
    	"ShipCity" nvarchar (15) NULL ,
    	"ShipRegion" nvarchar (15) NULL ,
    	"ShipPostalCode" nvarchar (10) NULL ,
    	"ShipCountry" nvarchar (15) NULL
    )
    Since there isn't a replacement for mysql's limit in mssql, I used a different method here. Anyway, it works fine with 500.000 rows. Sorting the columns take a little long, because the 'order by' clause sorts the whole table and if there are millions of rows ordering may become a pain.

    I want to thank FritFrut, for the "jayrock tutorial" and for helping me write this code.

    Regards.

  2. #82
    Ext User
    Join Date
    Nov 2007
    Posts
    9
    Vote Rating
    0
    WoLpH is on a distinguished road

      0  

    Default


    Quote Originally Posted by magunes117 View Post
    Since there isn't a replacement for mysql's limit in mssql, I used a different method here. Anyway, it works fine with 500.000 rows. Sorting the columns take a little long, because the 'order by' clause sorts the whole table and if there are millions of rows ordering may become a pain.
    Not a direct replacement, but using TOP works pretty well or this method if you're using SQL 2005: http://select-sql.com/mssql/how-to-m...ssql-2005.html

  3. #83
    Ext User
    Join Date
    Aug 2007
    Posts
    33
    Vote Rating
    0
    magunes117 is on a distinguished road

      0  

    Default


    Quote Originally Posted by WoLpH View Post
    Not a direct replacement, but using TOP works pretty well or this method if you're using SQL 2005: http://select-sql.com/mssql/how-to-m...ssql-2005.html
    Hi WoLpH,

    I know about 'TOP' but you can only use it as top X rows, not like the rows between X and Y. So it is not much useful. And I am using sql2005 as well as sql2000, oracle, etc. But if you have a better solution, I will be happy to use it.

    Regards.

  4. #84
    Ext User
    Join Date
    Nov 2007
    Posts
    9
    Vote Rating
    0
    WoLpH is on a distinguished road

      0  

    Default


    Yeah, it's not a perfect solution, here are a few others but I still think MS should have gone with the PostgreSQL/MySQL way of doing it: http://databases.aspfaq.com/database...recordset.html

    Although Oracle's implementation isn't that bad either, but less transparent imho.

  5. #85
    Ext User franck34's Avatar
    Join Date
    Dec 2007
    Location
    France, Montpellier
    Posts
    148
    Vote Rating
    1
    franck34 is on a distinguished road

      0  

    Default


    Hi,

    Just starting using extJs since 3 days. Seem's very cool, just need to learn. Big thanks for sharing.

    Regarding liveGrid, i've just have a little strange thing (both ie and ff). Not sure it's liveGrid because i'm using it into a Desktop app.

    Go here: http://innovacode.com/extjs/admin/
    Click the Example icon.
    On my side, I only have one item in the grid, but you will see that php file sent 2 items. If you resize/reduce/maximize the window, 2 items appear, as expected.

    Using Firebug, i can confirm when i see only one item, there is only one div (x-gridX-row), expected 2. Have an idea ?

    Thanks in advance.
    Best Regards,
    Franck

  6. #86
    Ext User
    Join Date
    Nov 2007
    Posts
    9
    Vote Rating
    0
    WoLpH is on a distinguished road

      0  

    Default


    It is most likely caused by the animating effect, when animating it sees the height of the grid as 0 when rendering, so it only renders 1 item. Perhaps a proper solution for this would be always rendering atleast x items.

    I have detected a little bug of my own by the way, when inserting rows it is only possible to insert rows at index 0 when there are not enough rows to scroll yet. After that inserting at 0 gives an error and only 1 and up is working.

  7. #87
    Ext User franck34's Avatar
    Join Date
    Dec 2007
    Location
    France, Montpellier
    Posts
    148
    Vote Rating
    1
    franck34 is on a distinguished road

      0  

    Default


    Quote Originally Posted by WoLpH View Post
    It is most likely caused by the animating effect, when animating it sees the height of the grid as 0 when rendering, so it only renders 1 item. Perhaps a proper solution for this would be always rendering atleast x items.
    Not sure about that because FireBug show only one div, expected 2. I can be wrong cause i'm starting with extJs.

  8. #88
    Ext User franck34's Avatar
    Join Date
    Dec 2007
    Location
    France, Montpellier
    Posts
    148
    Vote Rating
    1
    franck34 is on a distinguished road

      0  

    Thumbs up liveGrid: only one row displayed, expected 2 or more

    liveGrid: only one row displayed, expected 2 or more


    Fixed:
    this.grid.syncSize();

    ( just after win.show(); in my desktop app)
    Last edited by franck34; 3 Jan 2008 at 9:19 AM. Reason: changing icon

  9. #89
    Ext User
    Join Date
    Jul 2007
    Posts
    4
    Vote Rating
    0
    meteorbites is on a distinguished road

      0  

    Default Impressive

    Impressive


    impressive plugin.

    i've seen this kind of implementation before and it's great to have this as a plugin for EXT.

    Good job.

  10. #90
    Ext User
    Join Date
    Dec 2007
    Posts
    7
    Vote Rating
    0
    fred is on a distinguished road

      0  

    Default How to get cell value from rowclick event

    How to get cell value from rowclick event


    Hello,
    I'm a new user with Ext and discover yesterday this amazing widget.
    I try to get value on a rowclick event with no success; hereafter my code :

    Code:
    Ext.onReady(function(){
    
        var bufferedReader = new Ext.ux.data.BufferedJsonReader({
            root            : 'response.value.items',
            versionProperty : 'response.value.version',
            totalProperty   : 'response.value.total_count',
            id              : 'id'
          }, [ {
             name : 'number_field', sortType : 'int'
          },{
             name : 'string_field', sortType : 'string'
          },{
             name : 'date_field',   sortType : 'int'
        }]);
        
        var bufferedDataStore = new Ext.ux.grid.BufferedStore({
            autoLoad   : true,
            bufferSize : 300,
            reader     : bufferedReader,
            sortInfo   : {field: 'number_field', direction: 'ASC'},
            url        : '../services/data-proxy.php'
        });
    
        var bufferedView = new Ext.ux.grid.BufferedGridView({
                nearLimit      : 100,
                loadMask : {
                    msg : 'Chargement...'
        }});          
            
        var bufferedGridToolbar = new Ext.ux.BufferedGridToolbar({
            view        : bufferedView,
            displayInfo : true
        });
    
        var bufferedSelectionModel = new Ext.ux.grid.BufferedRowSelectionModel();        
       
     var colModel = new Ext.grid.ColumnModel([
            {header: "Number", align : 'left',   width: 160, sortable: true, dataIndex:'number_field'},
            {header: "String", align : 'left',   width: 160, sortable: true, dataIndex: 'string_field'},
            {header: "Date",   align : 'right',  width: 160, sortable: true, dataIndex: 'date_field'}
        ]);
    
    
        var grid = new Ext.grid.GridPanel({
            ds             : bufferedDataStore,
            enableDragDrop : false,
            cm             : colModel,
            sm             : bufferedSelectionModel,
            loadMask       : {msg : 'Chargement...'},
            view           : bufferedView,
            title          : 'Fonction2',
            bbar           : bufferedGridToolbar
        });
    	
        grid.on("rowclick", function(grid, rowIndex, e) {
                   rec = ds.data.items[rowIndex].id; // doesn't work !!!
    		alert(rec);
    		str = rec.get('Number');
    		alert(str);
        },this);
        
        var viewport = new Ext.Viewport({
    	maximizable : true,
            resizable   : true,
            layout      : 'fit',
            items       : [grid],
    	});
            
    });

    How get 'Number' value of the selected row ?
    Thanks for your help.
    Frederic

Thread Participants: 248

  1. JeffHowden (1 Post)
  2. Animal (4 Posts)
  3. rodiniz (1 Post)
  4. galdaka (2 Posts)
  5. mdissel (1 Post)
  6. Wolfgang (1 Post)
  7. zzo (2 Posts)
  8. Frank (1 Post)
  9. herve (2 Posts)
  10. ericd (2 Posts)
  11. RWaters (5 Posts)
  12. Digital God (1 Post)
  13. Dumbledore (11 Posts)
  14. KimH (1 Post)
  15. pjordan (1 Post)
  16. cpantel (1 Post)
  17. mystix (3 Posts)
  18. wanclark (1 Post)
  19. MD (3 Posts)
  20. drew (1 Post)
  21. jheid (15 Posts)
  22. tsprague (1 Post)
  23. Confused (2 Posts)
  24. thesilentman (1 Post)
  25. andreas.linde (1 Post)
  26. violinista (1 Post)
  27. redxiii (1 Post)
  28. akannu (1 Post)
  29. theo (1 Post)
  30. Troy Wolf (3 Posts)
  31. chh (4 Posts)
  32. Phenothiasine (1 Post)
  33. danh2000 (1 Post)
  34. tobiu (1 Post)
  35. badgerd (1 Post)
  36. mlarese (1 Post)
  37. pluesch0r (1 Post)
  38. krycek (1 Post)
  39. gtaylor (4 Posts)
  40. ftftft (1 Post)
  41. hallikpapa (7 Posts)
  42. tech-nova (1 Post)
  43. provagino (1 Post)
  44. mjlecomte (2 Posts)
  45. iancmcc (1 Post)
  46. andrei.neculau (7 Posts)
  47. zieli1 (1 Post)
  48. meteorbites (1 Post)
  49. brookd (3 Posts)
  50. alexpetri (1 Post)
  51. urskipfer (1 Post)
  52. JEBriggs (1 Post)
  53. magunes117 (6 Posts)
  54. shiweiwei97 (3 Posts)
  55. vpell (1 Post)
  56. gelleneu (4 Posts)
  57. ohhowihateie (2 Posts)
  58. Andrewd2 (1 Post)
  59. Jacob (1 Post)
  60. cherbert (2 Posts)
  61. DragonFist (1 Post)
  62. marcoas (1 Post)
  63. Shmoo (1 Post)
  64. GraemeBryce (1 Post)
  65. w011117 (1 Post)
  66. luxxxian (1 Post)
  67. loverofdream (1 Post)
  68. lvanderree (1 Post)
  69. robw (1 Post)
  70. SeaSharp (1 Post)
  71. xpressive (1 Post)
  72. jeremia (1 Post)
  73. wm003 (21 Posts)
  74. miti (1 Post)
  75. sfrancolla (1 Post)
  76. Blob (1 Post)
  77. WoLpH (5 Posts)
  78. khatuido (3 Posts)
  79. zacware (3 Posts)
  80. mepfuso (2 Posts)
  81. wasp (1 Post)
  82. sharpguy (1 Post)
  83. stevets (1 Post)
  84. fred (1 Post)
  85. eliasp (3 Posts)
  86. h0tzenpl0tz (1 Post)
  87. tonedeaf (1 Post)
  88. Zolcsi (3 Posts)
  89. dearsina (1 Post)
  90. efattal (3 Posts)
  91. franck34 (3 Posts)
  92. tyr (1 Post)
  93. cybertaz (1 Post)
  94. zergworld (8 Posts)
  95. sekundek (1 Post)
  96. cs_alpha (3 Posts)
  97. Sultanalifezar (3 Posts)
  98. emily (7 Posts)
  99. jwendt@iscinternational.com (1 Post)
  100. sinma (1 Post)
  101. ItsMee (3 Posts)
  102. Nic (1 Post)
  103. sksoft (4 Posts)
  104. mjhaston (1 Post)
  105. mattb (4 Posts)
  106. jenner (1 Post)
  107. 2le (1 Post)
  108. bluefeet (1 Post)
  109. PremiereGlobal (2 Posts)
  110. rtozati (1 Post)
  111. KirkOlson (4 Posts)
  112. False Maria (1 Post)
  113. jbd007 (5 Posts)
  114. c.barca (1 Post)
  115. nctag (34 Posts)
  116. kfironit123 (1 Post)
  117. Emt (1 Post)
  118. ub3rn00b (12 Posts)
  119. Ballsacian1 (1 Post)
  120. mprice (1 Post)
  121. srikanthnukala (2 Posts)
  122. Mots (2 Posts)
  123. yhwh (1 Post)
  124. el777 (1 Post)
  125. JoomlaMan (1 Post)
  126. sanjivank (1 Post)
  127. sdetweil (1 Post)
  128. Snakehit (1 Post)
  129. msynovic (2 Posts)
  130. Snuyt (1 Post)
  131. as (2 Posts)
  132. pkmiec (2 Posts)
  133. epoks (2 Posts)
  134. NoahK17 (1 Post)
  135. praneeth528 (2 Posts)
  136. bemn (1 Post)
  137. Remy (1 Post)
  138. Daniel_Brazil_Campinas (1 Post)
  139. freddyk (4 Posts)
  140. dshorthouse (1 Post)
  141. dahman7 (1 Post)
  142. Canard64 (1 Post)
  143. dkuz (2 Posts)
  144. xsuniwov (1 Post)
  145. neha.chopra (1 Post)
  146. Eric24 (2 Posts)
  147. Mandeep (2 Posts)
  148. ttbgwt (6 Posts)
  149. suzan (1 Post)
  150. tenthcup (5 Posts)
  151. excelsis (5 Posts)
  152. DaveBrewster (6 Posts)
  153. rusty124 (1 Post)
  154. bcmatz (3 Posts)
  155. bjcullinan (1 Post)
  156. sstratton (4 Posts)
  157. Scorpie (1 Post)
  158. supercharge2 (3 Posts)
  159. Bing Qiao (6 Posts)
  160. tmaung (1 Post)
  161. xenon (4 Posts)
  162. sureaintme (5 Posts)
  163. animeshsingh (2 Posts)
  164. NicoP (29 Posts)
  165. cyfl (2 Posts)
  166. simplessus (1 Post)
  167. imnphd (1 Post)
  168. mono blaine (5 Posts)
  169. Kango_V (5 Posts)
  170. cain06 (1 Post)
  171. charak (2 Posts)
  172. vayumahesh (1 Post)
  173. Gabor Turi (1 Post)
  174. daeghran (2 Posts)
  175. maceido (5 Posts)
  176. sgoswami (1 Post)
  177. rubaiz (1 Post)
  178. Jabe (1 Post)
  179. ecarrenho (1 Post)
  180. mpereira (1 Post)
  181. changhua (4 Posts)
  182. alexw23 (1 Post)
  183. fxmisticat (5 Posts)
  184. extjssiva (1 Post)
  185. f1xxx3r (1 Post)
  186. SimoAmi (1 Post)
  187. aj3423 (1 Post)
  188. kkothari (2 Posts)
  189. jmariani (28 Posts)
  190. ibet (3 Posts)
  191. SunWuKung (1 Post)
  192. micgala (2 Posts)
  193. inptisto (1 Post)
  194. TheColonel (1 Post)
  195. cdeguzman (1 Post)
  196. ektanit (6 Posts)
  197. James Wang (1 Post)
  198. PCBingoB (1 Post)
  199. flylaputa (1 Post)
  200. MacSimon (1 Post)
  201. pibree (2 Posts)
  202. Markus (1 Post)
  203. aleister999 (2 Posts)
  204. adamli (2 Posts)
  205. jmaisel (4 Posts)
  206. pdugas (1 Post)
  207. plaak (1 Post)
  208. coriolis (2 Posts)
  209. weazil (4 Posts)
  210. fwiethof (1 Post)
  211. meroy (19 Posts)
  212. lxf1101 (2 Posts)
  213. stephen.friedrich (3 Posts)
  214. vinepod (1 Post)
  215. yuriy (2 Posts)
  216. completej (1 Post)
  217. dan_jf (1 Post)
  218. harel (2 Posts)
  219. veenvliet.morion (2 Posts)
  220. yura620310 (1 Post)
  221. barncat (1 Post)
  222. DmitrySistor (2 Posts)
  223. pclovec (3 Posts)
  224. Ranma13 (1 Post)
  225. swang (4 Posts)
  226. calugaru.cristian (5 Posts)
  227. mohan_b (1 Post)
  228. karlsnyder0 (2 Posts)
  229. JimmyInMD (2 Posts)
  230. tolitius (1 Post)
  231. a.labeau (2 Posts)
  232. benjixx (1 Post)
  233. psm1963 (1 Post)
  234. sosy (1 Post)
  235. nosferatum (9 Posts)
  236. daddie888 (1 Post)
  237. ixvivxi (1 Post)
  238. dp814082 (1 Post)
  239. nickelj (4 Posts)
  240. wifi4psp (1 Post)
  241. drian (1 Post)
  242. su-aska (1 Post)
  243. SebTardif (1 Post)
  244. danceric (1 Post)
  245. DTSman (1 Post)
  246. brian.moeskau (1 Post)
  247. Neethi (2 Posts)
  248. sango (1 Post)

film izle

hd film izle

film sitesi

takipci kazanma sitesi

takipci kazanma sitesi

güzel olan herşey

takipci alma sitesi

komik eğlenceli videolar