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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Порядок расположения столбцов в DataGridView, AutoGenerateColumns = true 
V
    Опции темы
uzer3d
Дата 23.3.2008, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Отображаю колекцию своего класса Item в DataGridView

класс Item
Код

public class Item
    {
        #region Private Data

        // Первичный ключ товара
        private int id;

        // Наименование товара
        private string name;

        // Количество товара
        private int amount;

        // Цена за единицу товара
        private double price;

        // Цена умножить на кол-во товара
        // amount*price
        private double symmary;       

        // Ед. измерения товара (кг, м, штук, рулон)
        private Metrics metric;

        // Необходимое количество на 1 диван
        private double need;

        // Код категории (внешний ключ)
        private int category;

        #endregion
        ...


Далее ручками создаю DataGridView
Код

        //  Создание GridView
        private void CreateGridView()
        {
            //  создал временный грид виев
            DataGridView newCategoryGridView = new DataGridView();

            //  подготовил его к заполнению
            newCategoryGridView.Rows.Clear();
            newCategoryGridView.Refresh();

            //  Добавление столбцов и Привязка данных
            newCategoryGridView.DataSource = category.ItemList;
            //EditGridViewColumns(newCategoryGridView);   // <--- тут хочу поменять колонки местами, как мне нужно, а не как было создано автоматически

            //  Добавляем созданный GridView к Контролам нашей Формы
            AddGridViewToComponents(newCategoryGridView);
        }

        //  Добавляем и настраиваем созданные GridView к Контролам нашей Формы
        private void AddGridViewToComponents(DataGridView dataGridView)
        {
            dataGridView.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.                 AnchorStyles.Bottom)
                    | System.Windows.Forms.AnchorStyles.Left)
                    | System.Windows.Forms.AnchorStyles.Right)));
            dataGridView.Visible = false;
            dataGridView.BorderStyle = BorderStyle.FixedSingle;
            dataGridView.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.AllCells;

            dataGridView.ReadOnly = true;
            //dataGridView.
            this.Controls.Add(dataGridView);
        }


Получилось вот так:
user posted image

Хочу в методе EditGridViewColumns(DataGridView newCategoryGridView);
 - не показывать столбци Id, Category
 - упорядочить, тоесть Name, Amount...
 - добавить пару столбцов с кнопками
user posted image

Сделал руками что то подобное:
Код

private void EditGridViewColumns(DataGridView dataGridView, Category category)  // в category храниться колекция ItemList состоящая из объектов класса Item
        {

            dataGridView.AutoGenerateColumns = true;

            //  подготовил к заполнению
            //dataGridView.Rows.Clear();
            //dataGridView.Refresh();

            //  создал столбцы грид виев  
            dataGridView.Columns.Add("Name", "Наименование");
            dataGridView.Columns.Add("Amount", "Количество");
            dataGridView.Columns.Add("Metric", "Ед. имз.");
            dataGridView.Columns.Add("Price", "Цена");
            dataGridView.Columns.Add("Summary", "Сумма");


            //  узнал количество Итемов
            if (category.ItemList.Count > 0)
            {
                //  и создал нужное количество строк для данного ГридВиев
                dataGridView.Rows.Add(work.CategoryList[1].ItemList.Count - 1);

                //  инициализая счетчика итемов
                int itemCounter = 0;
                foreach (Item item in category.ItemList)
                {
                    //  создаю ячейки и помещаю в них данные текущего Итема
                    dataGridView.Rows[itemCounter].Cells[0].Value = item.Name;
                    dataGridView.Rows[itemCounter].Cells[1].Value = item.Amount;
                    dataGridView.Rows[itemCounter].Cells[2].Value = item.Metric;
                    dataGridView.Rows[itemCounter].Cells[3].Value = item.Price;
                    dataGridView.Rows[itemCounter].Cells[4].Value = item.Symmary;

                    ++itemCounter;
                }
            }
                 
           // //DataGridViewButtonCell cell2 = new DataGridViewButtonCell();// = (DataGridViewButtonCell)row0.Cells[2];
           //// dataGridView.Columns.Add(new DataGridViewColumn(new DataGridViewButtonCell()));

           // //dataGridView.Columns[0].Site = 

        }


Что то мне подсказивает smile, что есть вариант проще типа dataGridView.Columns... и какой то метод отвечает, за место расположения колонки. Юзаю поиск с утра, не нашел подходящий ответ, статью DataGridView. Новый контрол в составе Framework 2.0 прочитал, не помогло smile.

з.ы. Забыл добавить, что DavaGridView использую только для отображения, а не для редактирование, ReadOnly = true;




Это сообщение отредактировал(а) uzer3d - 23.3.2008, 15:41
PM MAIL   Вверх
33pda
Дата 26.3.2008, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата

то то мне подсказивает smile, что есть вариант проще типа dataGridView.Columns... и какой то метод отвечает, за место расположения колонки. Юзаю поиск с утра, не нашел подходящий ответ, статью DataGridView. Новый контрол в составе Framework 2.0 прочитал, не помогло smile.


Попробуй свойство DisplayIndex
PM MAIL   Вверх
uzer3d
Дата 27.3.2008, 23:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо! Это то, что мне и нужно. Сделал так:

Код


        private void ReOrderDisplayIndex(DataGridView dataGridView)
        {
            dataGridView.Columns["Name"].DisplayIndex = 0;
            dataGridView.Columns["Amount"].DisplayIndex = 1;
            dataGridView.Columns["Metric"].DisplayIndex = 2;
            dataGridView.Columns["Price"].DisplayIndex = 3;
            dataGridView.Columns["Need"].DisplayIndex = 4;
            dataGridView.Columns["Summary"].DisplayIndex = 5;
        }



Только как то хитро получаеться, эту функцию нужно кидать во Form1.Load() или в другой метод, который запускается после создания окна, а то вылетает ексепшин ArgumentOutOfRangeException. Наверное это по тому, что привязка данных срабатывет после создания формы.

И вот кстати вторая часть статьи, все расписано http://www.rsdn.ru/article/dotnet/DataGridView20part2.xml



PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

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


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

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


 




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


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

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