示例#1
0
        protected override IEnumerable ExecuteSelect(DataSourceSelectArguments arguments)
        {
            int pageSize = Int32.MaxValue;

            if (arguments.MaximumRows > 0)
            {
                pageSize = arguments.MaximumRows;
            }
            int         pageIndex = (arguments.StartRowIndex / pageSize);
            PageRequest request   = null;

            if (!(String.IsNullOrEmpty(_owner.PageRequestParameterName)))
            {
                string r = HttpContext.Current.Request.Params[_owner.PageRequestParameterName];
                if (!(String.IsNullOrEmpty(r)))
                {
#pragma warning disable 0618
                    System.Web.Script.Serialization.JavaScriptSerializer serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
#pragma warning restore 0618
                    request           = serializer.Deserialize <PageRequest>(r);
                    request.PageIndex = pageIndex;
                    request.PageSize  = pageSize;
                    request.View      = _owner.DataView;
                }
            }
            if (request == null)
            {
                request = new PageRequest(pageIndex, pageSize, arguments.SortExpression, null);
                List <string> filter = new List <string>();
                System.Collections.Specialized.IOrderedDictionary filterValues = FilterParameters.GetValues(HttpContext.Current, _owner);
                foreach (Parameter p in FilterParameters)
                {
                    if (filterValues[p.Name] != null)
                    {
                        string query = (p.Name + ":");
                        foreach (string s in Convert.ToString(filterValues[p.Name]).Split(',', ';'))
                        {
                            string q = Controller.ConvertSampleToQuery(s);
                            if (!(String.IsNullOrEmpty(q)))
                            {
                                query = (query + q);
                            }
                        }
                        filter.Add(query);
                    }
                }
                request.Filter = filter.ToArray();
            }
            request.RequiresMetaData = true;
            request.RequiresRowCount = arguments.RetrieveTotalRowCount;
            ViewPage page = ControllerFactory.CreateDataController().GetPage(_dataController, _dataView, request);
            if (arguments.RetrieveTotalRowCount)
            {
                arguments.TotalRowCount = page.TotalRowCount;
            }
            return(page.ToDataTable().DefaultView);
        }
示例#2
0
        protected override IEnumerable ExecuteSelect(DataSourceSelectArguments arguments)
        {
            var pageSize = Int32.MaxValue;

            if (arguments.MaximumRows > 0)
            {
                pageSize = arguments.MaximumRows;
            }
            var         pageIndex = (arguments.StartRowIndex / pageSize);
            PageRequest request   = null;

            if (!(string.IsNullOrEmpty(_owner.PageRequestParameterName)))
            {
                var r = HttpContext.Current.Request.Params[_owner.PageRequestParameterName];
                if (!(string.IsNullOrEmpty(r)))
                {
                    request           = JsonConvert.DeserializeObject <PageRequest>(r);
                    request.PageIndex = pageIndex;
                    request.PageSize  = pageSize;
                    request.View      = _owner.DataView;
                }
            }
            if (request == null)
            {
                request = new PageRequest(pageIndex, pageSize, arguments.SortExpression, null);
                var filter       = new List <string>();
                var filterValues = FilterParameters.GetValues(HttpContext.Current, _owner);
                foreach (Parameter p in FilterParameters)
                {
                    var v = filterValues[p.Name];
                    if (v != null)
                    {
                        var query = (p.Name + ":");
                        if ((p.DbType == DbType.Object) || (p.DbType == DbType.String))
                        {
                            foreach (var s in Convert.ToString(v).Split(',', ';'))
                            {
                                var q = Controller.ConvertSampleToQuery(s);
                                if (!(string.IsNullOrEmpty(q)))
                                {
                                    query = (query + q);
                                }
                            }
                        }
                        else
                        {
                            query = string.Format("{0}={1}", query, v);
                        }
                        filter.Add(query);
                    }
                }
                request.Filter = filter.ToArray();
            }
            request.RequiresMetaData = true;
            request.RequiresRowCount = arguments.RetrieveTotalRowCount;
            var page = ControllerFactory.CreateDataController().GetPage(_dataController, _dataView, request);

            if (arguments.RetrieveTotalRowCount)
            {
                arguments.TotalRowCount = page.TotalRowCount;
            }
            return(page.ToDataTable().DefaultView);
        }
示例#3
0
        protected internal override IEnumerable ExecuteSelect(DataSourceSelectArguments arguments)
        {
            if (SortParameterName.Length > 0 && SelectCommandType == SqlDataSourceCommandType.Text)
            {
                throw new NotSupportedException("The SortParameterName property is only supported with stored procedure commands in SqlDataSource");
            }

            if (arguments.SortExpression.Length > 0 && owner.DataSourceMode == SqlDataSourceMode.DataReader)
            {
                throw new NotSupportedException("SqlDataSource cannot sort. Set DataSourceMode to DataSet to enable sorting.");
            }

            if (arguments.StartRowIndex > 0 || arguments.MaximumRows > 0)
            {
                throw new NotSupportedException("SqlDataSource does not have paging enabled. Set the DataSourceMode to DataSet to enable paging.");
            }

            if (FilterExpression.Length > 0 && owner.DataSourceMode == SqlDataSourceMode.DataReader)
            {
                throw new NotSupportedException("SqlDataSource only supports filtering when the data source's DataSourceMode is set to DataSet.");
            }

            InitConnection();

            DbCommand command = factory.CreateCommand();

            command.CommandText = SelectCommand;
            command.Connection  = connection;
            if (SelectCommandType == SqlDataSourceCommandType.Text)
            {
                command.CommandType = CommandType.Text;
            }
            else
            {
                command.CommandType = CommandType.StoredProcedure;
                if (SortParameterName.Length > 0 && arguments.SortExpression.Length > 0)
                {
                    command.Parameters.Add(CreateDbParameter(SortParameterName, arguments.SortExpression));
                }
            }

            if (SelectParameters.Count > 0)
            {
                InitializeParameters(command, SelectParameters, null, null, false);
            }

            Exception exception = null;

            if (owner.DataSourceMode == SqlDataSourceMode.DataSet)
            {
                DataView dataView = null;

                if (owner.EnableCaching)
                {
                    dataView = (DataView)owner.Cache.GetCachedObject(SelectCommand, SelectParameters);
                }

                if (dataView == null)
                {
                    SqlDataSourceSelectingEventArgs selectingArgs = new SqlDataSourceSelectingEventArgs(command, arguments);
                    OnSelecting(selectingArgs);
                    if (selectingArgs.Cancel || !PrepareNullParameters(command, CancelSelectOnNullParameter))
                    {
                        return(null);
                    }
                    try {
                        DbDataAdapter adapter = factory.CreateDataAdapter();
                        DataSet       dataset = new DataSet();

                        adapter.SelectCommand = command;
                        adapter.Fill(dataset, name);

                        dataView = dataset.Tables [0].DefaultView;
                        if (dataView == null)
                        {
                            throw new InvalidOperationException();
                        }
                    }
                    catch (Exception e) {
                        exception = e;
                    }
                    int rowsAffected = (dataView == null) ? 0 : dataView.Count;
                    SqlDataSourceStatusEventArgs selectedArgs = new SqlDataSourceStatusEventArgs(command, rowsAffected, exception);
                    OnSelected(selectedArgs);

                    if (exception != null && !selectedArgs.ExceptionHandled)
                    {
                        throw exception;
                    }

                    if (owner.EnableCaching)
                    {
                        owner.Cache.SetCachedObject(SelectCommand, selectParameters, dataView);
                    }
                }

                if (SortParameterName.Length == 0 || SelectCommandType == SqlDataSourceCommandType.Text)
                {
                    dataView.Sort = arguments.SortExpression;
                }

                if (FilterExpression.Length > 0)
                {
                    IOrderedDictionary fparams            = FilterParameters.GetValues(context, owner);
                    SqlDataSourceFilteringEventArgs fargs = new SqlDataSourceFilteringEventArgs(fparams);
                    OnFiltering(fargs);
                    if (!fargs.Cancel)
                    {
                        object [] formatValues = new object [fparams.Count];
                        for (int n = 0; n < formatValues.Length; n++)
                        {
                            formatValues [n] = fparams [n];
                            if (formatValues [n] == null)
                            {
                                return(dataView);
                            }
                        }
                        dataView.RowFilter = string.Format(FilterExpression, formatValues);
                    }
                }

                return(dataView);
            }
            else
            {
                SqlDataSourceSelectingEventArgs selectingArgs = new SqlDataSourceSelectingEventArgs(command, arguments);
                OnSelecting(selectingArgs);
                if (selectingArgs.Cancel || !PrepareNullParameters(command, CancelSelectOnNullParameter))
                {
                    return(null);
                }

                DbDataReader reader = null;
                bool         closed = connection.State == ConnectionState.Closed;

                if (closed)
                {
                    connection.Open();
                }
                try {
                    reader = command.ExecuteReader(closed ? CommandBehavior.CloseConnection : CommandBehavior.Default);
                }
                catch (Exception e) {
                    exception = e;
                }
                SqlDataSourceStatusEventArgs selectedArgs =
                    new SqlDataSourceStatusEventArgs(command, reader.RecordsAffected, exception);
                OnSelected(selectedArgs);
                if (exception != null && !selectedArgs.ExceptionHandled)
                {
                    throw exception;
                }

                return(reader);
            }
        }