This is a migrated thread and some comments may be shown as answers.

WinForms look & feel.

18 Answers 356 Views
GridView
This is a migrated thread and some comments may be shown as answers.
Raymond
Top achievements
Rank 1
Raymond asked on 13 Dec 2010, 12:53 PM

Hi,

Could You please provide Theme for WinForms style (I couldn't found one).

I was trying to achieve that using Visual Style Builder, but effect wasn't well rounded, even that I've spent some time on that.

The problem I'm facing is that I'm using RadGridView as an extension for a WinForm based project and it don't fit in well.

Another issue is that WinForms looks a little different on differents OS (XP, Windows 7) while RadGridView looks always exactly the same.

Regards.

18 Answers, 1 is accepted

Sort by
0
Richard Slade
Top achievements
Rank 2
answered on 13 Dec 2010, 01:03 PM
Hello Raymond,

The closest you're going to get without making on in VSB is the Window7 theme. I have attached a screenshot of a RadgridView with this theme.
However, I'd stress that part of the point of Telerik controls is that they do look "better" then the standard WinForms controls and the consistancy that you can get with themes is part of this.

Hope that helps, but let me know if you have any questions
Richard
0
Raymond
Top achievements
Rank 1
answered on 13 Dec 2010, 01:26 PM

Hi

Thanks for tip but I've already know about provided themes, Windows 7 as well - I was trying to create win forms theme starting from that as a pattern with out a good result. What I'm truing to point is a lack of consistency, when you use telerik in winforms host.

Regards.

0
Richard Slade
Top achievements
Rank 2
answered on 13 Dec 2010, 01:31 PM
Hi Raymond, 

Sorry to hear that didn't help. As you know, the only way to make your own is by using the Visual Style builder. The Telerik grids will always look the same under different operating systems, which in my view is better than the standard grid where the look is inconsistent over different operating systems. 

Best regards, 
Richard
0
Raymond
Top achievements
Rank 1
answered on 13 Dec 2010, 02:09 PM

Hi

I'm not quite sure if You get exactly what problem I'm facing with.

I have already written and tested big application using WinForms. I'm extending it with RadGridView so to make it consistence either I have to change everything to telerik controls what for now is not an option or fit in RadGidView, so it will match WinForms.

I hope some of telerik core developers will read that post and extend it with WinForms look and feel.

Regards.

0
Richard Slade
Top achievements
Rank 2
answered on 13 Dec 2010, 02:26 PM
Hi Raymond, 

Yes, I think I understand your issue but as you have mentioned, the standard grid looks different on different operating systems. Any sort of theme won't do this unless you can develop a theme and then change it depending on the OS. 

Best regards, 
Richard
0
Raymond
Top achievements
Rank 1
answered on 13 Dec 2010, 03:50 PM

Hi

"the standard grid looks different on different operating systems" - all winforms does

"Any sort of theme won't do this unless you can develop a theme and then change it depending on the OS. " - that's why I raised this ticket, I'd like to have a help from Telerik Team in creating such a behavior. I need some theme that look exactly like WinForms on different OS.

Regards.

0
Svett
Telerik team
answered on 16 Dec 2010, 06:08 PM
Hi Raymond,

Thank you for your suggestions.

Presently, the theming system of Telerik Presentation Framework does not support that kind of scenario.
What you can do is create a theme that resembles the style of the Microsoft controls. Actually, you should create two themes - one for the style of the Microsoft controls that you get under Windows XP and one for the style of the controls under Windows 7. You can also use Windows7 theme that we provide for the latter case. Then, when you start your application, simply execute the following logic in your form:

if (System.Environment.OSVersion.Version.Major >= 6)
{
    ThemeResolutionService.ApplicationThemeName = "Windows7";
}
else
{
    ThemeResolutionService.ApplicationThemeName = "CustomXPTheme";
}

I hope this helps.

Best wishes,

Svett
the Telerik team

 

Check out the Q1 2011 Roadmap for Telerik Controls for Windows Forms.
0
Raymond
Top achievements
Rank 1
answered on 21 Dec 2010, 12:11 PM

Hi!

I have found in RadElement class method:

VisualStyleElement GetXPVisualStyle()

 
Can I somehow apply style returned by this method to my controls?

I was searching forum to find some information about this method but I didn`t find anything.

Regards

 

0
Raymond
Top achievements
Rank 1
answered on 21 Dec 2010, 12:25 PM

I was testing this method in my custom cell class but this method returns null.

Does this method work?

 

 

public class CellXP : GridDataCellElement
{
    public CellXP(GridViewColumn column, GridRowElement row)
        : base(column, row)
    {
    }       
}


 

public class ColumnXP : GridViewTextBoxColumn
{
    public override Type GetCellType(GridViewRowInfo row)
    {
        if (row is GridViewDataRowInfo)
        {
            return typeof(CellXP);
        }
        return base.GetCellType(row);
    }
}

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Windows.Forms.VisualStyles;
  
namespace GetXPVisualStyle
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
  
            radGridView1.Columns.Add(new ColumnXP());
            radGridView1.Columns.Add(new ColumnXP());
  
            radGridView1.Rows.Add("0:0", "0:1");
            radGridView1.Rows.Add("1:0", "1:1");
        }
  
        private void radGridView1_CellFormatting(object sender, Telerik.WinControls.UI.CellFormattingEventArgs e)
        {
            VisualStyleElement xpStyle = e.CellElement.GetXPVisualStyle();
            //xpStyle is null, why? 
        }
    }
}

 

 

 

Regards

0
Accepted
Richard Slade
Top achievements
Rank 2
answered on 21 Dec 2010, 01:04 PM
Hello Raymond,

The CellElement is near the end of a long inheritance chain. None of the items in that chain implement GetXPVisualStyles apart from the base RadElement which returns Null. This is different in the case of other elements.

Regards,
Richard
0
Svett
Telerik team
answered on 23 Dec 2010, 12:06 PM
Hi Guys,

@Raymond: As Richard mentioned, non of the items in TPF implements this method. This method was a part of a feature which we did not introduced in favor of other important tasks. However, currently we do not plan to develop the feature further and we will hide the method in question.
@Richard: Thank you for your assistance in the forums.

Regards,
Svett
the Telerik team
Q3’10 SP1 of RadControls for WinForms is available for download; also available is the Q1'11 Roadmap for Telerik Windows Forms controls.
0
Raymond
Top achievements
Rank 1
answered on 27 Dec 2010, 11:58 AM

Hi!

Creating new theme is very time consuming so I tried another idea – just hook formatting events and change colors to required values.
Generally my goal is to have RadGridView that looks like standard ListView (according to OS settings).
I made simple example but not everything is updated according to my changes.

namespace GetXPVisualStyle
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            FillTelerikGrid();
            radGridView1.EnableAlternatingRowColor = false;
            radGridView1.EnableHotTracking = false;
            radGridView1.MultiSelect = true;
            radGridView1.BackColor = Color.Green;
        }
  
        private void FillTelerikGrid()
        {
            List<HierarchicalClass> level1 = new List<HierarchicalClass>();
            level1.Add(new HierarchicalClass() { Id = "1", Name = "row1, level1", ParentId = string.Empty });
            level1.Add(new HierarchicalClass() { Id = "2", Name = "row2, level1", ParentId = string.Empty });
  
            List<HierarchicalClass> level2 = new List<HierarchicalClass>();
            level2.Add(new HierarchicalClass() { Id = "3", Name = "row1, level2", ParentId = "1" });
            level2.Add(new HierarchicalClass() { Id = "4", Name = "row2, level2", ParentId = "1" });
            level2.Add(new HierarchicalClass() { Id = "5", Name = "row3, level2", ParentId = "2" });
            level2.Add(new HierarchicalClass() { Id = "6", Name = "row4, level2", ParentId = "2" });
  
            List<HierarchicalClass> level3 = new List<HierarchicalClass>();
            level3.Add(new HierarchicalClass() { Id = "7", Name = "row1, level3", ParentId = "3" });
            level3.Add(new HierarchicalClass() { Id = "8", Name = "row2, level3", ParentId = "3" });
            level3.Add(new HierarchicalClass() { Id = "9", Name = "row3, level3", ParentId = "3" });
  
            this.radGridView1.DataSource = level1;
  
            GridViewTemplate templateLevel2 = new GridViewTemplate();
            templateLevel2.DataSource = level2;
            this.radGridView1.Templates.Add(templateLevel2);
            GridViewRelation relation12 = new GridViewRelation();
            relation12.RelationName = "relation12";
            relation12.ParentTemplate = this.radGridView1.MasterTemplate;
            relation12.ChildTemplate = templateLevel2;
            relation12.ParentColumnNames.Add("Id");
            relation12.ChildColumnNames.Add("ParentId");
            this.radGridView1.Relations.Add(relation12);
  
            GridViewTemplate templateLevel3 = new GridViewTemplate();
            templateLevel3.DataSource = level3;
            templateLevel2.Templates.Add(templateLevel3);
            GridViewRelation relation23 = new GridViewRelation();
            relation23.RelationName = "relation23";
            relation23.ParentTemplate = templateLevel2;
            relation23.ChildTemplate = templateLevel3;
            relation23.ParentColumnNames.Add("Id");
            relation23.ChildColumnNames.Add("ParentId");
            this.radGridView1.Relations.Add(relation23);
        }
  
        private void radGridView1_ViewCellFormatting(object sender, Telerik.WinControls.UI.CellFormattingEventArgs e)
        {
            e.CellElement.RowElement.HotTracking = false;
            e.CellElement.ForeColor = Color.Red;
            e.CellElement.BackColor = Color.Blue;
            e.CellElement.BorderWidth = 0;
            e.CellElement.GradientStyle = GradientStyles.Solid;
            e.CellElement.HorizontalLineColor = Color.Blue;
        }
  
        private void radGridView1_ViewRowFormatting(object sender, RowFormattingEventArgs e)
        {
            e.RowElement.Font = listView1.Font;
            e.RowElement.TableElement.RowHeight = 18;
            e.RowElement.TableElement.TableHeaderHeight = 18;
            e.RowElement.HotTracking = false;
  
            e.RowElement.ForeColor = Color.Red;
            e.RowElement.BackColor = Color.Blue;
            e.RowElement.GradientStyle = GradientStyles.Solid;
            e.RowElement.BorderWidth = 0;
            e.RowElement.HorizontalLineColor = Color.Blue;
            e.RowElement.GridBorderHorizontalColor = Color.Blue;
        }
  
        private void radGridView1_RowFormatting(object sender, RowFormattingEventArgs e)
        {
            e.RowElement.HotTracking = false;
            e.RowElement.ForeColor = Color.Red;
            e.RowElement.BackColor = Color.Blue;
            e.RowElement.GradientStyle = GradientStyles.Solid;
        }
  
        private void radGridView1_CellFormatting(object sender, CellFormattingEventArgs e)
        {
            e.CellElement.RowElement.HotTracking = false;
            e.CellElement.ForeColor = Color.Red;
            e.CellElement.BackColor = Color.Blue;
            e.CellElement.BorderWidth = 0;
            e.CellElement.GradientStyle = GradientStyles.Solid;
        }
    }
}

public class HierarchicalClass
{
    public string Id { get; set; }
    public string Name { get; set; }
    public string ParentId { get; set; }
}

I have couple questions:

1. What is the difference between ViewCellFormatting event and CellFormatting?
 I don`t see difference but if there are two kinds of these events probably there is something…
 The same question I have about row formatting events (view and without view).

2. I cannot disable hot tracking on rows that are not root rows. For root rows hot tracking is disabled. How to disable hot tracking for all rows?

3. When I run my app it looks that RadGridView doesn`t apply all my changes.
 Problem is that the first row has blue background only in first cell and second row is not blue at all. Why? I haven’t added condition to change background only for  selected rows yet but I don`t need this logic at this moment.

4. Next problem is that when I select first row still not all area of row becomes blue. Selected cell is ok but other cells from this row have yellow/orange horizontal  lines (on the top and bottom of the row). How to make whole row area blue?

5. How can I remove grid lines? For example standard list view doesn`t have these lines.

BTW: why I cannot attach any screenshots?

Regards

0
Accepted
Richard Slade
Top achievements
Rank 2
answered on 28 Dec 2010, 08:26 PM
Hello Raymond,

I'll answer the questions that I can answer. Some I may have to come back to you on.

1: the difference between CellFormatting and ViewCellFormatting is while CellFormatting event is fired only for data cells, ViewCellFormatting is fired for all RadGridView cells. So if you want to format the grouping row or the header cells, you should use ViewCellFormatting. Have a look at the documentation here
For the other items, have a look over the dicumentation as above. you are handling both the CellFormatting and ViewCellFormatting events for exmaple and not resetting the LightVisualElement.

5: You can remove all grid lines by not drawing the border. For example
private void radGridView1_ViewCellFormatting(object sender, CellFormattingEventArgs e)
{
    e.CellElement.DrawBorder = false;
}

Re: Adding images, there is a current issue with the site which is due to be fixed on the next web maintenance update.

hope this helps
Richard

0
Accepted
Stefan
Telerik team
answered on 29 Dec 2010, 05:57 PM
Hello Raymond,

Please check the answers that Richard suggested, all they are correct. Regarding the rest of your questions - please check the comments in the following code snippet. I have skipped the FillTelerikGrid method and the HierarchicalClass for better readability:

public Form1()
{
    InitializeComponent();
    FillTelerikGrid();
    radGridView1.EnableAlternatingRowColor = false;
    radGridView1.EnableHotTracking = false;
    radGridView1.MultiSelect = true;
    radGridView1.BackColor = Color.Green;
 
   radGridView1.ViewCellFormatting+=new CellFormattingEventHandler(radGridView1_ViewCellFormatting);
   radGridView1.ViewRowFormatting+=new RowFormattingEventHandler(radGridView1_ViewRowFormatting);   
}
 
private void radGridView1_ViewCellFormatting(object sender, Telerik.WinControls.UI.CellFormattingEventArgs e)
{
    //allow changing the colors
    e.CellElement.DrawFill = true;
 
    //make the styling
    if (e.CellElement is GridDataCellElement)
    {
         
        e.CellElement.ForeColor = Color.Red;
        e.CellElement.BackColor = Color.Blue;
        e.CellElement.GradientStyle = GradientStyles.Solid;
        e.CellElement.HorizontalLineColor = Color.Blue;
        e.CellElement.Font = listView1.Font;
        e.CellElement.BorderWidth = 0;
         
    }
    //reset those settings for NON-data cells
    else
    {
        e.CellElement.ResetValue(LightVisualElement.ForeColorProperty);
        e.CellElement.ResetValue(LightVisualElement.BackColorProperty);
        e.CellElement.ResetValue(LightVisualElement.GradientStyleProperty);
        e.CellElement.ResetValue(LightVisualElement.HorizontalLineColorProperty);
        e.CellElement.ResetValue(LightVisualElement.FontProperty);
        e.CellElement.ResetValue(LightVisualElement.BorderWidthProperty);
    }
 
    //hide the borders
    e.CellElement.DrawBorder = false;
 
    //stop the hot tracking for child views
    if (e.CellElement is GridDetailViewCellElement)
    {
        GridDetailViewCellElement cell = e.CellElement as GridDetailViewCellElement;
        cell.ChildTableElement.EnableHotTracking = false;
    }
}
 
private void radGridView1_ViewRowFormatting(object sender, RowFormattingEventArgs e)
{
    //here resetting is not needed in case you want those setting to be applied to all rows (header, filter, grouping etc)
    e.RowElement.TableElement.RowHeight = 18;
    e.RowElement.TableElement.TableHeaderHeight = 18;
}

I hope this information addresses your question. If something is not clear of you need further assistance, do not hesitate to write back.

Richard, thank you for the community effort. Your Telerik Points have been upgraded for this.

All the best,
Stefan
the Telerik team
Q3’10 SP1 of RadControls for WinForms is available for download; also available is the Q1'11 Roadmap for Telerik Windows Forms controls.
0
Raymond
Top achievements
Rank 1
answered on 29 Dec 2010, 09:32 PM

Thanks for explanations – it was helpful for me.

Tomorrow I will test proposal from Admin.

Regards

0
Sangeetha
Top achievements
Rank 1
answered on 11 Jan 2011, 07:32 AM
To make RadGrid view as ListView, I made the following changes but it did not work!

Please help out!

private

 

void m_radGridViewFunction_ViewCellFormatting(object sender, CellFormattingEventArgs e)
{
e.CellElement.DrawBorder =
false;
e.CellElement.BorderColor =
Color.Transparent;
e.CellElement.BorderWidth = 0;
e.CellElement.HorizontalLineColor =
Color.Transparent;
e.CellElement.HorizontalLineWidth = 0;
}

 

0
Accepted
Richard Slade
Top achievements
Rank 2
answered on 11 Jan 2011, 10:43 AM
Hello Sangeetha,

Please take a look at this article on how to make a RadGridView as a multicolumnlistbox
Hope that helps
Richard
0
Sangeetha
Top achievements
Rank 1
answered on 11 Jan 2011, 12:05 PM
Thanks for your reply, it works. I have made changes as follows:

private

 

void radGridView1_ViewCellFormatting(object sender, CellFormattingEventArgs e)
{
e.CellElement.DrawFill =
true;
e.CellElement.DrawBorder =
false;
e.CellElement.GradientStyle =
GradientStyles.Solid;
}
But then, the rows are getting multiselected for which I have changed as, (i did not want multiselection as in RadListBox).

 

private

 

void m_radGridViewFunction_CurrentRowChanged(object sender, CurrentRowChangedEventArgs e)
{
if (e.CurrentRow != null)
    e.CurrentRow.Cells[0].CellElement.BackColor = System.Drawing.
Color.FromArgb(((int)(((byte)(252)))), ((int)(((byte)(154)))), ((int)(((byte)(63)))));
if (e.OldRow != null)
    e.OldRow.Cells[0].CellElement.BackColor =
Color.White;
}

Still this does not work completely as when i scroll with the scroll bar of grid view, the items get selected . When i scroll top, top element gets selected. When I scroll down, bottom element gets selected and so on .
Can you please let me know the event fired when scroll bar is moved up & down? Scroll event is not called. 

 

 

 

 

 

 

Tags
GridView
Asked by
Raymond
Top achievements
Rank 1
Answers by
Richard Slade
Top achievements
Rank 2
Raymond
Top achievements
Rank 1
Svett
Telerik team
Stefan
Telerik team
Sangeetha
Top achievements
Rank 1
Share this question
or