Telerik Forums
UI for ASP.NET AJAX Forum
3 answers
111 views
Hello all,
I'm use the RadGrid in WebServerControl and I'm have a problem with the event of "SelectedIndexChanged" with "AllowFilteringByColumn = true;"
This is the declaration code for my RadGrid : 
var Grid = 
new RadGrid
            {
                AllowFilteringByColumn = true,
                AllowPaging = true,
                AllowSorting = true,
                ShowStatusBar = true,
                ShowHeader = true,
                GridLines = GridLines.None,
                PageSize = PageSize,
                EnableViewState = true,
                ID = string.Format("{0}_Grid", ID)
            };

When I'm selected a row after use filters, the grid is rebind and my filter is loosed.
The value of "SelectedValue" doesn't match with my selection and the grid is reinitialised.

My Code:
WebServerControl:
public class CustomRadGrid : WebControl, INamingContainer
{
    protected RadAjaxManager AjaxManager;
    protected RadAjaxLoadingPanel AjaxLoadingPanel;
    protected RadGrid Grid;
    protected ObjectDataSource ObjDataSource;
 
    #region PROPERTIES
    public string SelectCountMethod;
    public string SelectMethod;
    public string MaximumRowsParameterName;
    public string StartRowIndexParameterName;
    public string DataObjectTypeName;
    public List<KeyValuePair<string, string>> SelectParameters;
 
    /// <summary>
    /// Display columns in gridview
    /// </summary>
    /// <value>
    /// Key = ColumnName       
    /// Value = DiplayName, Type of the column ToString()
    /// </value>
    public List<KeyValuePair<string, KeyValuePair<string, Type>>> DisplayColumns;
 
    /// <summary>
    /// Data Key Names uses in Master Table View
    /// </summary>
    public string[] DataKeyNames;
 
    /// <summary>
    /// If you want use external DataSource, set this DataSourceID
    /// </summary>
    public string DataSourceID;
 
    /// <summary>
    /// Set this for initialize a control to refresh after row selection
    /// </summary>
    public string ControlIDToRefresh { private get; set; }
 
    /// <summary>
    /// Gets or sets the size of the page.
    /// </summary>
    /// <value>
    /// The size of the page.
    /// </value>
    private int _pageSize;
    public int PageSize
    {
        get
        {
            return (Grid != null) ? Grid.PageSize : _pageSize;
        }
        set
        {
            _pageSize = value;
            if (Grid != null)
            { Grid.PageSize = _pageSize; }
        }
    }
 
    /// <summary>
    /// Gets the index of the current page.
    /// </summary>
    /// <value>
    /// The index of the current page.
    /// </value>
    public int CurrentPageIndex
    {
        get
        {
            EnsureChildControls();
            return (Grid != null) ? Grid.CurrentPageIndex : 0;
        }
    }
 
    /// <summary>
    /// Gets the selected value.
    /// </summary>
    private string _selectedValue;
    public string SelectedValue
    {
        get
        {
            return string.IsNullOrEmpty(_selectedValue) ? "" : _selectedValue;
        }
    }
 
    /// <summary>
    /// Save grid settings
    /// </summary>
    private string _settings;
 
    #endregion PROPERTIES
 
    /// <summary>
    /// Initializes a new instance of the <see cref="CustomRadGrid"/> class.
    /// </summary>
    public CustomRadGrid()
    {
        PageSize = 20;
        DataSourceID = "";
    }
 
    /// <summary>
    /// Gets a <see cref="T:System.Web.UI.ControlCollection"/> object that represents the child controls for a specified server control in the UI hierarchy.
    /// </summary>
    /// <returns>
    /// The collection of child controls for the specified server control.
    ///   </returns>
    public override ControlCollection Controls
    {
        get
        {
            EnsureChildControls();
            return base.Controls;
        }
    }
 
    /// <summary>
    /// Raises the <see cref="E:System.Web.UI.Control.Load"/> event.
    /// </summary>
    /// <param name="e">The <see cref="T:System.EventArgs"/> object that contains the event data.</param>
    protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);
 
        #region DataSource
        if (string.IsNullOrEmpty(DataSourceID))
        {
            ObjDataSource = new ObjectDataSource
            {
                //EnablePaging = true,
                TypeName = "BLL.BL",
                ID = string.Format("{0}_ObjDataSource", ID),
                SelectMethod = SelectMethod,
                SelectCountMethod = SelectCountMethod
            };
            if (!string.IsNullOrEmpty(MaximumRowsParameterName))
                ObjDataSource.MaximumRowsParameterName = MaximumRowsParameterName;
            if (!string.IsNullOrEmpty(StartRowIndexParameterName))
                ObjDataSource.StartRowIndexParameterName = StartRowIndexParameterName;
            ObjDataSource.Selecting += ObjDataSourceSelecting;
            foreach (var selectParameter in SelectParameters)
            {
                ObjDataSource.SelectParameters.Add(selectParameter.Key, selectParameter.Value);
            }
            Controls.Add(ObjDataSource);
        }
        #endregion DataSource
 
        #region GRID
        Grid = new RadGrid
        {
            AllowFilteringByColumn = true,
            AllowPaging = true,
            AllowSorting = true,
            ShowStatusBar = true,
            ShowHeader = true,
            GridLines = GridLines.None,
            PageSize = PageSize,
            EnableViewState = true,
            ID = string.Format("{0}_Grid", ID)
        };
        if (DisplayColumns == null || DisplayColumns.Count == 0)
        {
            Grid.MasterTableView.AutoGenerateColumns = Grid.AutoGenerateColumns = true;
        }
        else
        {
            Grid.MasterTableView.AutoGenerateColumns = Grid.AutoGenerateColumns = false;
            foreach (var displayColumn in DisplayColumns)
            {
                Grid.MasterTableView.Columns.Add(new GridBoundColumn
                {
                    UniqueName = displayColumn.Key,
                    DataField = displayColumn.Key,
                    DataType = displayColumn.Value.Value,
                    HeaderText = displayColumn.Value.Key,
                    DataFormatString =
                        displayColumn.Value.Value == typeof(DateTime)
                            ? "{0:d}"
                            : "{0}"
                });
            }
        }
 
        Grid.ClientSettings.EnableRowHoverStyle = true;
        Grid.ClientSettings.EnableAlternatingItems = true;
        Grid.ClientSettings.EnablePostBackOnRowClick = true;
        Grid.ClientSettings.Selecting.AllowRowSelect = true;
 
        Grid.MasterTableView.CommandItemDisplay = GridCommandItemDisplay.Top;
        Grid.MasterTableView.CommandItemSettings.ShowRefreshButton = false;
        Grid.MasterTableView.CommandItemSettings.ShowAddNewRecordButton = false;
        Grid.MasterTableView.CommandItemSettings.ShowExportToExcelButton = true;
        Grid.MasterTableView.PagerStyle.AlwaysVisible = true;
 
        //Select the DataSource
        if (string.IsNullOrEmpty(DataSourceID) && ObjDataSource != null)
        { Grid.DataSourceID = ObjDataSource.ID; }
        else if (ObjDataSource == null && !string.IsNullOrEmpty(DataSourceID))
        { Grid.DataSourceID = DataSourceID; }
        else
        { Grid.NeedDataSource += OnNeedDataSource; }
        //Initialise DataKeys
        if (DataKeyNames != null && DataKeyNames.Count() > 0)
        { Grid.MasterTableView.DataKeyNames = DataKeyNames; }
 
        //Grid events
        //Grid.Init += GridInit;
        Grid.ItemCommand += GridItemCommand;
        Grid.ItemCreated += GridItemCreated;
        Grid.SelectedIndexChanged += GridSelectedIndexChanged;
        Controls.Add(Grid);
 
        #endregion GRID
 
        #region AJAX
        //Initialise Ajax Manager
        AjaxLoadingPanel = new RadAjaxLoadingPanel
        {
            InitialDelayTime = 1,
            MinDisplayTime = 200,
            ID = string.Format("{0}_AjaxLoadingPanel", ID)
        };
        Controls.Add(AjaxLoadingPanel);
 
        AjaxManager = RadAjaxManager.GetCurrent(Page);
        if (AjaxManager == null)
        {
            AjaxManager = new RadAjaxManager
            {
                ID = string.Format("{0}_AjaxManager", ID),
                DefaultLoadingPanelID = AjaxLoadingPanel.ID,
                EnableAJAX = true
            };
            Controls.Add(AjaxManager);
            Page.Items.Add(typeof(RadAjaxManager), AjaxManager);
        }
 
        //Set Ajax Settings:
        if (!string.IsNullOrEmpty(ControlIDToRefresh))
        {
            var ajaxSetting = new AjaxSetting(Grid.ID);
            ajaxSetting.UpdatedControls.Add(new AjaxUpdatedControl(ControlIDToRefresh, AjaxLoadingPanel.ID));
            ajaxSetting.EventName = "OnRowSelected";
            AjaxManager.AjaxSettings.Add(ajaxSetting);
        }
        AjaxManager.AjaxSettings.AddAjaxSetting(Grid, Grid, AjaxLoadingPanel, UpdatePanelRenderMode.Inline);
 
        //To export in Excel:
        if (!Page.ClientScript.IsStartupScriptRegistered(GetType(), string.Format("{0}_onRequestStart", ID)))
        {
            var onRequestStart = string.Format("function {0}_onRequestStart(ajaxManager, eventArgs){{if(eventArgs.EventTarget.indexOf('ExportToExcelButton') != -1){{eventArgs.EnableAjax = false;}}}}", ID);
            Page.ClientScript.RegisterStartupScript(GetType(), string.Format("{0}_onRequestStart", ID), onRequestStart, true);
            AjaxManager.ClientEvents.OnRequestStart = string.Format("{0}_onRequestStart", ID);
        }
        #endregion AJAX
    }
 
    /// <summary>
    /// Grids the init.
    /// Reduce the set of filter functions so that the filter menu can only show the NoFilter, Contains, EqualTo, GreaterThan and LessThan items
    /// </summary>
    /// <param name="sender">The sender.</param>
    /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
    void GridInit(object sender, EventArgs e)
    {
        var menu = Grid.FilterMenu;
        var i = 0;
        while (i < menu.Items.Count)
        {
            if (menu.Items[i].Text == "NoFilter" || menu.Items[i].Text == "Contains" || menu.Items[i].Text == "EqualTo" || menu.Items[i].Text == "GreaterThan" || menu.Items[i].Text == "LessThan")
            {
                i++;
            }
            else
            {
                menu.Items.RemoveAt(i);
            }
        }
    }
 
    #region GRID EVENTS
    /// <summary>
    /// Delegate to attach method on SelectedIndexChanged
    /// </summary>
    /// <param name="sender">The sender.</param>
    /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
    public delegate void SelectedIndexChangedHandler(object sender, EventArgs e);
 
    /// <summary>
    /// Occurs when [selected index changed].
    /// </summary>
    [Category("Configuration"), Browsable(true), Description("Evènement associé au gridview")]
    public event SelectedIndexChangedHandler SelectedIndexChanged;
 
    /// <summary>
    /// Grids the selected index changed.
    /// </summary>
    /// <param name="sender">The sender.</param>
    /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
    void GridSelectedIndexChanged(object sender, EventArgs e)
    {
        _selectedValue = (string)(Grid.SelectedValue ?? "");
        if (SelectedIndexChanged != null)
            SelectedIndexChanged(this, e);
    }
 
    /// <summary>
    /// Delegate to attach method on NeedDataSource
    /// </summary>
    /// <param name="sender">The sender.</param>
    /// <param name="e">The <see cref="System.EventArgs"/> instance containing the event data.</param>
    public delegate void NeedDataSourceHandler(object sender, EventArgs e);
 
    /// <summary>
    /// Occurs when [need data source].
    /// </summary>
    [Category("Configuration"), Browsable(true), Description("Evènement associé au gridview")]
    public event NeedDataSourceHandler NeedDataSource;
 
    /// <summary>
    /// Called when [need data source].
    /// </summary>
    /// <param name="sender">The sender.</param>
    /// <param name="e">The <see cref="Telerik.Web.UI.GridNeedDataSourceEventArgs"/> instance containing the event data.</param>
    void OnNeedDataSource(object sender, GridNeedDataSourceEventArgs e)
    {
        if (NeedDataSource != null) { NeedDataSource(this, e); }
        else if (string.IsNullOrEmpty(DataSourceID)) { Grid.DataSource = ObjDataSource; }
    }
    #endregion GRID EVENTS
 
    #region EXPORT
    /// <summary>
    /// To know if exporting
    /// </summary>
    bool _isExport = false;
 
    /// <summary>
    /// Grids the item created.
    /// </summary>
    /// <param name="sender">The sender.</param>
    /// <param name="e">The <see cref="Telerik.Web.UI.GridItemEventArgs"/> instance containing the event data.</param>
    void GridItemCreated(object sender, GridItemEventArgs e)
    {
        //Remove the filter line when exporting data
        if (e.Item is GridFilteringItem && _isExport)
            e.Item.Visible = false;
    }
 
    /// <summary>
    /// Grids the item command.
    /// </summary>
    /// <param name="sender">The sender.</param>
    /// <param name="e">The <see cref="Telerik.Web.UI.GridCommandEventArgs"/> instance containing the event data.</param>
    private void GridItemCommand(object sender, GridCommandEventArgs e)
    {
        if (e.CommandName == RadGrid.ExportToExcelCommandName ||
             e.CommandName == RadGrid.ExportToWordCommandName ||
             e.CommandName == RadGrid.ExportToCsvCommandName)
        {
            Grid.ExportSettings.OpenInNewWindow = true;
            Grid.ExportSettings.ExportOnlyData = true;
            Grid.ExportSettings.IgnorePaging = true;
            Grid.ExportSettings.Excel.Format = GridExcelExportFormat.Html;
            Grid.ExportSettings.FileName = string.Format("[{0}]Export", DateTime.Now.ToString("yyyyMMdd_HHmm"));
            _isExport = true;
        }          
    }
    #endregion EXPORT
 
    #region DATASOURCE
    /// <value>
    /// The data source.
    /// </value>
    public object DataSource
    {
        set
        {
            EnsureChildControls();
            Grid.DataSource = value;
        }
    }
 
    /// <summary>
    /// Objs the data source selecting.
    /// </summary>
    /// <param name="sender">The sender.</param>
    /// <param name="e">The <see cref="System.Web.UI.WebControls.ObjectDataSourceSelectingEventArgs"/> instance containing the event data.</param>
    private void ObjDataSourceSelecting(object sender, ObjectDataSourceSelectingEventArgs e)
    {
        if (SelectParameters != null)
        {
            ObjDataSource.SelectParameters.Clear();
            if (!e.ExecutingSelectCount &&
                SelectParameters.Count != 0)
            {
                foreach (var selectParameter in SelectParameters)
                {
                    ObjDataSource.SelectParameters.Add(selectParameter.Key, selectParameter.Value);
                }
            }
        }
 
    }
    #endregion DATASOURCE
}

WebPart who's use it :

public class DIList : Abstract.BaseAjaxWebpart
    {
        protected GridViewDI DIs;
        protected EditDI DIEdit;
        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);
 
            DIEdit = new EditDI { ID = string.Format("{0}_DIEdit", this.ID) };
            Controls.Add(DIEdit);
 
            DIs = new GridViewDI { ID = string.Format("{0}_DIList", this.ID), ControlIDToRefresh = DIEdit.ID };
            Controls.AddAt(0, DIs);
            DIs.SelectedIndexChanged += DIListSelectedIndexChanged;
        }
 
        void DIListSelectedIndexChanged(object sender, EventArgs e)
        {
            DIEdit.idDIValue = DIs.SelectedValue;
        }
    }

Andrey
Telerik team
 answered on 22 Dec 2011
5 answers
43 views
Hi All,
I want to hide those time slot which do not have any appointment. Basically I am using scheduler control for iphone which covering  a lot of blank spaces. I just want to hide time slots which don't have any appointment. Is it possible? Can you suggest any better way to display scheduler for iphone.Thanks in advance.
Peter
Telerik team
 answered on 22 Dec 2011
2 answers
273 views
Hi guys,

I'm using RadImageEditor inside a FormView and i'm trying to retrieve a imagem from a Postgre Database. I'm also using OpenAccessDataSource.

I follow this http://demos.telerik.com/aspnet-ajax/imageeditor/examples/default/defaultcs.aspx and this http://www.telerik.com/community/forums/aspnet-ajax/image-editor/combine-imageeditor-control-with.aspx links and i'm still not able to solve the issue.

In my aspx page i have the following code:

<telerik:RadImageEditor ID="RadImageEditor1" runat="server"  OnImageLoading="RadImageEditor1_ImageLoading" Width="720px" Height="430px">
</telerik:RadImageEditor>

In code behind i have the following:

protected void RadImageEditor1_ImageLoading(object sender, ImageEditorLoadingEventArgs args)
{
    DATA db = new DATA();
    var r = (from a in db.Tb_example where a.example_id == Convert.ToInt64(frmExample.DataKey.Value) select a).FirstOrDefault();
    if (r.Image != null)
    {
        MemoryStream s = new MemoryStream(r.Image.ToArray());
        Telerik.Web.UI.ImageEditor.EditableImage img = new Telerik.Web.UI.ImageEditor.EditableImage(s);
     args.Image = img;
     args.Cancel = true;
    }
}

I'm getting the following error message:

"Sys.WebForms.PageRequestManagerServerErrorException: Object reference not set to an instance of an object."

I'm sure the image is in the Database because i'm able to see it through RadBinaryImage control.

Any help will be appreciated. Thanks in advance.
  
Rumen
Telerik team
 answered on 22 Dec 2011
2 answers
114 views
Hi!
I have download Telerik_RadFormDecorator_2011_3_1115 FREE_EDITION and have setup it.
I create empty project with aspx WebForm and add RadButton on it.
But I got error about "....script...".
I added ScriptManager and  It now it is working.
But I can not select another skin. Only default is in  the combox.
I think I find why.
But when I select "Configure Projects" I got message that I use trial controls.
How I can understand what is in FormDecorator is free?

Regards.
Anton.


Slav
Telerik team
 answered on 22 Dec 2011
1 answer
67 views
Hello,

We are migrating our SP environment to 2010 version. In the old MOSS2007 we used custom Webparts inheriting from RadEditorWebPart, and were setting some properties of the ContentEditor at runtime. 
Now, during the tests for compatibility with SP2010, we've seen that some of them are not supported anymore.

It would important for us to know what are the equivalents or other possibilities for the following settings:
  • ContentEditor.StripAbsoluteAnchorPaths
  • ContentEditor.StripAbsoluteImagesPaths
  • ContentEditor.ConvertFontToSpan
  • ContentEditor.AllowThumbGeneration

Thank you very much in advance for your help!
kind regards,
lukasz
Rumen
Telerik team
 answered on 22 Dec 2011
4 answers
135 views
Hi there, 

I am experiencing some strange behavior from the telerik charts. 

I am randomly getting "Error Loading RadChart image"  and a small "X" where the charts are supposed to be when loading them.

Any reason why this is happening? Anyway to prevent it? If not, is there anyway to detect it in code so that i can load it again?

Thanks in advance

Kevin
Kevin Cauchi
Top achievements
Rank 1
 answered on 22 Dec 2011
11 answers
140 views
Good Day,

I've noticed when crating a skin using the visual style builder it does not include the Common Folder for the Loading Images as well as the Ajax Folder and Ajax.*.css file. I have also noticed that the Loading.Gif file is static and does not animate. Are there plans to include this into the Visual Style builder?

There is also an error when colourizing the ImageEditor Control which popups a window saying

"Not found
Sorry, we couldn't find the page you're looking for.
Try one of the links below."
Bozhidar
Telerik team
 answered on 22 Dec 2011
5 answers
80 views
I am trying to find which Resource ID was the exact one to translate the Delete link of the AutoGenerateDeleteButon, i could find everything else but not the delete , can you tell me which one to add so that i can finish my translation

Best Regards

Daniel Bertrand
Mira
Telerik team
 answered on 22 Dec 2011
1 answer
43 views
I know that a lot of your controls require a script manager on the page. My question is, what exactly does it do? I've read on scrip managers and their general function, but what specific function does it serve for your tools? I'm just curious.
Dimitar Terziev
Telerik team
 answered on 22 Dec 2011
3 answers
79 views
hello team.I m nebie for telerik...
My questions is related combobox fill by parameters without page load!....
I m .net developer but i dont know javascript because of that i choose telerik set....I found a solution at this article
http://demos.telerik.com/aspnet-ajax/combobox/examples/functionality/multiplecomboboxes/defaultcs.aspx

but this problem solved by Javascript function...I couldnt understand this...Are there anybody to help me?
our goal is same already....
Countries->Cities->districts related combo....yes it worked fine for this sample....but when i have another  related combo problem i cant write javascript function what will i do?
Ivana
Telerik team
 answered on 22 Dec 2011
Narrow your results
Selected tags
Tags
+? more
Top users last month
Will
Top achievements
Rank 2
Iron
Motti
Top achievements
Rank 1
Iron
Hester
Top achievements
Rank 1
Iron
Bob
Top achievements
Rank 3
Iron
Iron
Veteran
Thomas
Top achievements
Rank 2
Iron
Want to show your ninja superpower to fellow developers?
Top users last month
Will
Top achievements
Rank 2
Iron
Motti
Top achievements
Rank 1
Iron
Hester
Top achievements
Rank 1
Iron
Bob
Top achievements
Rank 3
Iron
Iron
Veteran
Thomas
Top achievements
Rank 2
Iron
Want to show your ninja superpower to fellow developers?
Want to show your ninja superpower to fellow developers?