powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Порядок столбцов в GridView при привязке данных
4 сообщений из 4, страница 1 из 1
Порядок столбцов в GridView при привязке данных
    #34042597
rksf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Добрый день!
Есть GridView, привязанный к ObjectDataSource. Данные последнего беруться из класса типа:

public class User
    {
        private string login;
        private string password;

        // Properties
        public string Login { get { return login; } set { login = value; } }
        public string Password { get { return password; } set { password = value; } }
        }
    }

Столбцы GridView генеряться из пропертей класса.
Вопрос: как я могу задать порядок столбцов в GridView? А то они всегда генеряться не в том порядке, который нужен.

Всем спасибо!
...
Рейтинг: 0 / 0
Порядок столбцов в GridView при привязке данных
    #34042800
mogadanez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
R>Столбцы GridView генеряться из пропертей класса.
R>Вопрос: как я могу задать порядок столбцов в GridView? А то они всегда генеряться не в том порядке, который нужен.

единственное что могу предложить — оборачивать класс User в некую упорядоченную структуру.

а вообще, не понятно, почему хочется использовать Autogenerated columns
по моему в чистом виде совершенно бесполезная вешь.
она может быть востребована только в двух сценариях:

1. есть большой кусок кода который готовит полностью правильные данные для генерации колонок, т.е и их порядок, и caption's и т.д.
но даже в этом случае далеко не все свойства получится заполнить автоматически по метаданным. например всякие визуальные свойства, управление сортировками и т.д.
т.е. более предпочтительнее все равно по неким подготовленным метаданным, идти и создавать колонки динамически.

2. второй сценарий более гипотетический, ибо не поддерживается стандартно ( но можно реализовать/*по крайней мере можно было в DataGrid из 1.1*/ расширив стандартные контролы ).
идея такова:
— грид при включенном AutoGenerateColumns вызывает событие OnAutogeneratedColumns которое возвращает массив колонок. создает колонки опять же наш код.... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
...
Рейтинг: 0 / 0
Порядок столбцов в GridView при привязке данных
    #34045516
rksf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо за ответ, mogadanez, Вы писали:

M>единственное что могу предложить — оборачивать класс User в некую упорядоченную структуру.
Что значит структура ? struct ? А для нее, что, сгенерированные столбцы будут в неком заданном порядке? Наверное нет... :(


M>а вообще, не понятно, почему хочется использовать Autogenerated columns
Проблема в том, что класс (напр. User), для которго генеряться колонки, заранее не известен. Т. е. мы можем подсовывать различные классы с различными наборами пропертей. На этапе разработки эти классы не известны.
Мне бы подошло, располагать эти колонки, например, по алфавиту тайтлов.
Но как-то без reflection не получается. Придется пользоваться им :)) .
...
Рейтинг: 0 / 0
Порядок столбцов в GridView при привязке данных
    #34045611
mogadanez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте, rksf, Вы писали:

R>Спасибо за ответ, mogadanez, Вы писали:

M>>единственное что могу предложить — оборачивать класс User в некую упорядоченную структуру.
R>Что значит структура ? struct ? А для нее, что, сгенерированные столбцы будут в неком заданном порядке? Наверное нет... :(

нет, Array, Diactonary, Table....

R>Проблема в том, что класс (напр. User), для которго генеряться колонки, заранее не известен. Т. е. мы можем подсовывать различные классы с различными наборами пропертей. На этапе разработки эти классы не известны.
R>Мне бы подошло, располагать эти колонки, например, по алфавиту тайтлов.
R>Но как-то без reflection не получается. Придется пользоваться им :)) .

можно ввести атрибут для типа с перечислением порядка колонок.



    public class ColumnOrderAttribute : Attribute
    {
        public ColumnOrderAttribute(params string[] orders)
        {
            this.orders = orders;
        }

        public string[] orders;
    }
//  Закоменть эту строку и получишь старое поведение.
    [ColumnOrderAttribute("Login", "Password" )]
    public class User
    {
        public User(string login, string password )
        {
            this.login = login;
            this.password = password;
        }

        private string login;
        private string password;

        // Properties
        public string Login { get { return login; } set { login = value; } }
        public string Password { get { return password; } set { password = value; } }

        
    }

    public class BLL
    {
        public object GetSource()
        {
            return new object[] { new User("aa", "aaaaaa"), new User("bb", "bbbbbb") };
        }

        public static  DataControlField[] CreateColumns(Type t)
        {
            object[] attrs = t.GetCustomAttributes(typeof(ColumnOrderAttribute), true);
            if (attrs != null && attrs.Length>0)
            {
                ColumnOrderAttribute orders = (ColumnOrderAttribute)attrs[0];
                DataControlField[] res = new DataControlField[orders.orders.Length];
                int count = 0;
                foreach( string column in orders.orders )
                {
                    BoundField f = new BoundField();
                    f.DataField = column;
                    f.HeaderText = column;
                    f.SortExpression = column;
                    res[count] = f;
                    count++;
                }
                return res;
 
            }
            else
                return null;
        }
    }
........
........
        
        
 protected void Page_Init(object sender, EventArgs e)
    {
        DataControlField[] ff = BLL.CreateColumns(typeof(User));
        if (ff != null)
            foreach (DataControlField f in ff)
                GridView1.Columns.Add(f);
        else
            GridView1.AutoGenerateColumns = true;
        
    }... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Порядок столбцов в GridView при привязке данных
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]