Intellisense для имен столбцов DataGridView при использовании List <T>в качестве источника данных - PullRequest
1 голос
/ 31 августа 2011

У меня есть DataGridView, который имеет 4 столбца, которые должны быть отформатированы. Источник данных для этого DataGridView - это общий список объектов из класса с 4 свойствами.

Во время разработки, как я могу использовать intelisense для указания столбца?

DataGridView dgv = new DataGridView();
List<MyDataRow> myDataList = new List<MyDataRow>();

   // List is populated in this section of code...

dgv.DataSource = myDataList;
dgv.Columns["ALongDescriptiveNameThatCouldEasilyBeMistyped"].Width = 80;    .

   // dgv is added to a form and displayed in this section of code

public class MyDataRow
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public double ALongDescriptiveNameThatCouldEasilyBeMistyped { get; set; }
    public int YearsOfService { get; set; }
    public int MonthsOfService { get; set; }
}

Ответы [ 3 ]

1 голос
/ 01 сентября 2011

Вы можете использовать следующий класс, который содержит метод, использующий дерево выражений в качестве аргумента для определения имени члена на основе лямбда-выражения:

public class MemberHelper<T> where T : class
{
    public string GetName<U>(Expression<Func<T, U>> expression)
    {
        MemberExpression memberExpression = expression.Body as MemberExpression;
        if(memberExpression != null)
            return memberExpression.Member.Name;

        throw new InvalidOperationException("Member expression expected");
    }
}

Вы можете использовать метод следующим образом:

MemberHelper<MyDataRow> memberHelper = new MemberHelper<MyDataRow>();
dgv.Columns[memberHelper.GetName(d => d.FirstName)].Width = 80; 
0 голосов
/ 01 сентября 2011

Intellisense не поможет, потому что Columns - это просто int / string indexer.Вы можете использовать атрибуты для свойств и некоторого отражения, а затем строковый массив Linq-запроса, содержащий имена свойств, украшенные определенным атрибутом, но, возможно, в вашем случае это не стоит.

0 голосов
/ 31 августа 2011

Самый простой способ - объявить перечисление, содержащее имена столбцов с присвоенными целочисленными значениями от 0 до N, и использовать это перечисление для доступа на основе индекса к столбцам DataGrid.

Примерно так: псевдокод:

enum ColumnNames
{
    ColumnName1 = 0, 
    ColumnName2 = 1,
    ColumnName3 = 2,
     .....
      .....
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...