Как устанавливается ключ для UltraGridBand?

Как работает Ключевая предварительная операция устанавливается на UltraGrid при вызове SetDataBinding(object DataSource, string DataMember, bool hideNewColumns)? И как я могу установить его на что-то кроме List'1?

У меня есть следующая форма и класс:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
        this.ultraGrid2.SetDataBinding(new List<row>(), string.Empty, true);
        this.ultraGrid2.DisplayLayout.ColumnChooserEnabled = DefaultableBoolean.True; 
        // breakpoint on the above line and run the below immediate window code
    }
}

public class row
{
    public string Name { get; set; }
    public string Address { get; set; }
}

После установки привязки данных приведенный ниже код всегда дает мне List'1 в непосредственном окне:

this.ultraGrid2.DisplayLayout.Bands[0].Key

person Ryan Gates    schedule 06.03.2013    source источник
comment
Почему я решил, что это вопрос о музыке?   -  person Moo-Juice    schedule 07.03.2013


Ответы (2)


В объекте UltraGridBand есть частный метод, который вызывается во время привязки данных, называемый InitBandKey, и именно в этом методе задается ключ.

Логика для этого аналогична следующей:

CurrencyManager cm = (CurrencyManager)this.bindingManager;
if (cm.List is ITypedList) 
{
    newKey = ((ITypedList)cm.List).GetListName(null);
} 
else 
{
  newKey = cm.List.GetType().Name;
}     

В вашем примере вы получаете результат (new List<row>()).GetType().Name

Вы можете определить класс, производный от List<row>, и тогда имя этого класса будет ключом группы. Например:

public class CustomList:List<row>
{

}

И затем обновленный вызов SetDataBinding для этого примера:

this.ultraGrid1.SetDataBinding(new CustomList(), string.Empty, true);
person alhalama    schedule 06.03.2013

Попробуйте установить Key из Band[0] во время разработки.

Обычно Band[x].Key — это имя привязанного DataTable/DataView, но в случае List<T> нет имени для использования, и, возможно, оно автоматически определяется элементом управления.

person Steve    schedule 06.03.2013
comment
К сожалению, это дает мне исключение NotSupportedException, указывающее, что ключ Band не может быть установлен. - person Ryan Gates; 07.03.2013
comment
Странно, только что попробовал на пустом UltraWinGrid в решении WinForms, и я могу установить это свойство. - person Steve; 07.03.2013
comment
Я все еще получаю эту ошибку. Похоже, что в документации это звучит так, как будто это возможно, но не следует использовать Ключевое свойство. - person Ryan Gates; 18.03.2013