Модераторы: gambit, Partizan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> DATAGRID, вертикальный текст в HEAD или компонент 
V
    Опции темы
Springtime
Дата 29.4.2009, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 221
Регистрация: 25.10.2006
Где: Россия, Тюмень

Репутация: нет
Всего: 2



Всем привет!
В общем интересует как сделать что бы текст в заголовках DataGrid сделать вертикальным, не предлагать метод Paint - 
http://www.astahost.com/info.php/vertical-...der_t12863.html
Т.к. необходимо что бы еще поддерживался перенос текста на новую строку!

Или подскажите компонент пофиг какой, который это поддерживает.

Пожалуйста!  smile 
--------------------
ICQ: 1fe410f46e7f48f6c721bc866d8294a2
PM MAIL ICQ   Вверх
Roha
Дата 30.4.2009, 15:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 14.12.2006

Репутация: нет
Всего: 1



DevExpress (XtraGrid) например.
PM MAIL   Вверх
Springtime
Дата 4.5.2009, 07:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 221
Регистрация: 25.10.2006
Где: Россия, Тюмень

Репутация: нет
Всего: 2



Цитата(Roha @ 30.4.2009,  15:55)
DevExpress (XtraGrid) например.

А ты можешь выложит принскрин, что бы я увидел что там это действительно есть, т.к. я что то это не нашел.

Это сообщение отредактировал(а) Springtime - 4.5.2009, 07:52
--------------------
ICQ: 1fe410f46e7f48f6c721bc866d8294a2
PM MAIL ICQ   Вверх
Roha
Дата 5.5.2009, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 14.12.2006

Репутация: нет
Всего: 1



Выставляешь свойство ColumnPanelRowHeight - размер заголовка и прописываешь в коде события CustomDrawColumnHeader следующие 
Код

private bool vertical = true;
        private void gridView1_CustomDrawColumnHeader(object sender, DevExpress.XtraGrid.Views.Grid.ColumnHeaderCustomDrawEventArgs e)
        {
            Rectangle r = e.Info.CaptionRect;
            e.Info.Caption = "";
            e.Painter.DrawObject(e.Info);
            if (e.Column != null)
            {
                System.Drawing.Drawing2D.GraphicsState state = e.Graphics.Save();
                StringFormat sf = new StringFormat();
                sf.Trimming = StringTrimming.EllipsisCharacter;
                sf.FormatFlags |= StringFormatFlags.NoWrap;
                if (vertical)
                    sf.FormatFlags |= StringFormatFlags.DirectionVertical;
                //if (diagonal) r = Transform(e.Graphics, 30, r);
                e.Graphics.DrawString(e.Column.Caption, e.Appearance.Font, e.Appearance.GetForeBrush(e.Cache), r, sf);
                e.Graphics.Restore(state);
            }
            e.Handled = true;
        }

Скрин во вложении

Присоединённый файл ( Кол-во скачиваний: 25 )
Присоединённый файл  VerticalHaeders.jpg 27,32 Kb
PM MAIL   Вверх
Roha
Дата 5.5.2009, 09:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 14.12.2006

Репутация: нет
Всего: 1



Забыл. Для переноса текста замени
Код

sf.FormatFlags |= StringFormatFlags.NoWrap;


на 
Код

sf.FormatFlags |= StringFormatFlags.NoClip;

PM MAIL   Вверх
Springtime
Дата 5.5.2009, 15:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 221
Регистрация: 25.10.2006
Где: Россия, Тюмень

Репутация: нет
Всего: 2



Большое спасибо!  smile 
--------------------
ICQ: 1fe410f46e7f48f6c721bc866d8294a2
PM MAIL ICQ   Вверх
Springtime
Дата 8.5.2009, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 221
Регистрация: 25.10.2006
Где: Россия, Тюмень

Репутация: нет
Всего: 2



Roha еще раз тебе большое спасибо, почти всё получилось с обычным dataGridView, наследуя от DataGridViewColumnHeaderCell

Код

class CustumDataGridViewColumnHeaderCell : DataGridViewColumnHeaderCell

    {
        private Color cellColor;
        private Color textColor;
        public CustumDataGridViewColumnHeaderCell()
        {
        }
        public CustumDataGridViewColumnHeaderCell(Color cellColor, Color textColor)
        {
            this.cellColor = cellColor;
            this.textColor = textColor;
        }
        protected override void Paint(Graphics graphics, Rectangle clipBounds, Rectangle cellBounds, int rowIndex, DataGridViewElementStates dataGridViewElementState, object value, object formattedValue, string errorText, DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts paintParts)
        {
            base.Paint(graphics, clipBounds, cellBounds, rowIndex, dataGridViewElementState, String.Empty, String.Empty, errorText, cellStyle, advancedBorderStyle, paintParts);

            Rectangle r = new Rectangle(cellBounds.X, cellBounds.Y, cellBounds.Width, cellBounds.Height - 2);
           
            Color c = Color.FromArgb(200, cellColor);
            LinearGradientBrush b = new LinearGradientBrush(r, c, Color.White, 90);
            
            graphics.FillRectangle(b, r);
            
            Brush tBrush = new SolidBrush(this.textColor);
            Font f = new Font(cellStyle.Font, FontStyle.Bold);
            StringFormat StF = new StringFormat();
            StF.Trimming = StringTrimming.EllipsisCharacter;
            StF.Alignment = StringAlignment.Near;
            StF.FormatFlags = StringFormatFlags.NoClip | StringFormatFlags.DirectionVertical | StringFormatFlags.DirectionRightToLeft;
            //graphics.DrawString((string)value, f, tBrush, new PointF(cellBounds.X + 5, cellBounds.Y + 5),StF);
            graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAliasGridFit;
            graphics.DrawString((string)value, f, tBrush, r, StF);
        }
 
        public override object Clone()
        {
            CustumDataGridViewColumnHeaderCell c = (CustumDataGridViewColumnHeaderCell)base.Clone();
            c.cellColor = this.cellColor;
            return (c);
        }


и потом

Код

this.Column1 = new System.Windows.Forms.DataGridViewComboBoxColumn();
this.Column1.HeaderCell = new Rigel.CustumDataGridViewColumnHeaderCell(System.Drawing.Color.AliceBlue, System.Drawing.Color.Black);


Получаем:
user posted image

В общем есть несколько вопросов:
1. Как мне повернуть текст на 180 градусов, т.е. что бы начало строки было не сверху, а с низу? Пытался с помощью RotateTransform,
Код

Rectangle r = new Rectangle(1-cellBounds.X, -1-cellBounds.Y, cellBounds.Width, cellBounds.Height);
graphics.TranslateTransform(cellBounds.Width, cellBounds.Height);
graphics.RotateTransform(180.0F);
 
но выходит какая то чушь. Текст переворачивается как надо, но начинаются косяки в виде артефактов. 

2. В общем при переопределении каких либо свойств у DataGridView средствами студии, код написанный тобой в Designer.cs
Код

this.Column1.HeaderCell = new Rigel.CustumDataGridViewColumnHeaderCell(System.Drawing.Color.AliceBlue, System.Drawing.Color.Black);

исчезает, что я заметил давно ), но не зная как этого избежать.
и
3. В общем DataGridView очень гибкий элемент, но проблемы с Designer.cs, меня убивают, не знаю что делать. Писать отдельный компонент, или можно как то еще связать то, что ты переопределил в нём, и одновременно пользоваться обычным редактором свойств? Для добавление ячеек, настройкой их отображения и т.д. 

В общем не знаю как действовать.

Это сообщение отредактировал(а) Springtime - 8.5.2009, 14:59
--------------------
ICQ: 1fe410f46e7f48f6c721bc866d8294a2
PM MAIL ICQ   Вверх
Roha
Дата 8.5.2009, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 62
Регистрация: 14.12.2006

Репутация: нет
Всего: 1



Посмотри это может поможет
http://msdn.microsoft.com/ru-ru/library/awacs0xh.aspx
PM MAIL   Вверх
Springtime
Дата 28.5.2009, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 221
Регистрация: 25.10.2006
Где: Россия, Тюмень

Репутация: нет
Всего: 2



На здоровье:

Код

class CustumDataGridViewColumnHeaderCell : DataGridViewColumnHeaderCell
    {
        private Color cellColor;
        private Color textColor;
        String str;
        bool tr;
        public CustumDataGridViewColumnHeaderCell()
        { }

        public CustumDataGridViewColumnHeaderCell(Color cellColor, Color textColor, String str, bool tr)
        {
            this.cellColor = cellColor;
            this.textColor = textColor;
            this.str = str;
            this.tr = tr;
        }
        protected override void Paint(Graphics graphics, Rectangle clipBounds, Rectangle cellBounds, int rowIndex, DataGridViewElementStates dataGridViewElementState, object value, object formattedValue, string errorText, DataGridViewCellStyle cellStyle, DataGridViewAdvancedBorderStyle advancedBorderStyle, DataGridViewPaintParts paintParts)
        {
            base.Paint(graphics, clipBounds, cellBounds, rowIndex, dataGridViewElementState, String.Empty, String.Empty, errorText, cellStyle, advancedBorderStyle, paintParts);

            System.Drawing.Drawing2D.GraphicsState state = graphics.Save();

            Rectangle r = new Rectangle(cellBounds.X, cellBounds.Y, cellBounds.Width, cellBounds.Height);
            SolidBrush b = new SolidBrush(cellColor);
            graphics.FillRectangle(b, r);
            
            Brush tBrush = new SolidBrush(this.textColor);
            Font f = new Font(cellStyle.Font, FontStyle.Regular);
            StringFormat StF = new StringFormat();
            StF.Trimming = StringTrimming.EllipsisCharacter;

            Pen pen = new Pen(Color.Black, 1F);

            graphics.DrawRectangle(pen, cellBounds.X, cellBounds.Y, cellBounds.Width-1, cellBounds.Height-1);

            StF.FormatFlags = StringFormatFlags.NoClip | StringFormatFlags.MeasureTrailingSpaces;
            graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAliasGridFit;
            StF.LineAlignment = StringAlignment.Far;
            StF.Alignment = StringAlignment.Near;
            if(tr) 
            {
                r = Transform(graphics, -90, r);
                StF.LineAlignment = StringAlignment.Center;
                StF.Alignment = StringAlignment.Center;
            }

          //graphics.DrawString(str, f, tBrush, r, StF);
            graphics.DrawString(str, f, tBrush, r, StF);
            graphics.Restore(state);
        }
 
        public override object Clone()
        {
            CustumDataGridViewColumnHeaderCell c = (CustumDataGridViewColumnHeaderCell)base.Clone();
            c.cellColor = this.cellColor;
            return (c);
        }

        private Rectangle Transform(Graphics g, int degree, Rectangle r)
        {
            g.TranslateTransform(0, r.Height);
            g.RotateTransform(degree);
            Rectangle r1 = r;
            r1.X = r.Y;
            r1.Y = r.X;
            r1.Width = r.Height;
            r1.Height = r.Width;
            return r1;
        }
    }


Всё как надо.  smile 

Это сообщение отредактировал(а) Springtime - 28.5.2009, 09:36
--------------------
ICQ: 1fe410f46e7f48f6c721bc866d8294a2
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка Windows Forms | Следующая тема »


 




[ Время генерации скрипта: 0.0514 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.