2013-12-09 3 views
0

В настоящее время я работаю над обновлением приложения Vb6, использующего Flexgrid для C#, и одним из требований является добавление нескольких динамически добавленных столбцов в конец связанных данных, пользователь вводит данные.Невозможно установить значения для несвязанных столбцов в C1 Flexgrid

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

Это код, который я добавлять динамические столбцы и установки их данные:

foreach (var O in Orders) 
{ 
    if (!AddedOrders.Contains(O.L.Order)) 
    { 
    c1FlexGrid1.Cols.Add(2); 
    c1FlexGrid1.Cols[c1FlexGrid1.Cols.Count - 2].Caption = "Cus " + (AddedOrders.Count + 1).ToString(); 
    c1FlexGrid1.Cols[c1FlexGrid1.Cols.Count - 2].Name = "Cus " + (AddedOrders.Count + 1).ToString(); 
    c1FlexGrid1.Cols[c1FlexGrid1.Cols.Count - 2].DataType = typeof(string); 
    c1FlexGrid1.Cols[c1FlexGrid1.Cols.Count - 1].Caption = "Qty " + (AddedOrders.Count + 1).ToString(); 
    c1FlexGrid1.Cols[c1FlexGrid1.Cols.Count - 1].Name = "Qty " + (AddedOrders.Count + 1).ToString(); 
    c1FlexGrid1.Cols[c1FlexGrid1.Cols.Count - 1].DataType = typeof(int); 

    bool Res = c1FlexGrid1.SetData(1, c1FlexGrid1.Cols.Count - 2, O.C.Company, true); 
    c1FlexGrid1.SetData(2, c1FlexGrid1.Cols.Count - 2, O.L.Order, true); 
    c1FlexGrid1.SetData(3, c1FlexGrid1.Cols.Count - 2, O.L.Confirmed, true); 
    c1FlexGrid1.SetData(4, c1FlexGrid1.Cols.Count - 2, O.L.Variety, true); 

    c1FlexGrid1.SetData(1, c1FlexGrid1.Cols.Count - 1 , 0); 

    CustCols.Add(c1FlexGrid1.Cols.Count - 2); 
    AddedOrders.Add(O.L.Order); 
    } 
} 

BOOL I прибавляли, чтобы проверить, что функция возвращается правда, что это, так далеко, как код поскольку это выглядит так, как будто оно успешно установило значение.

Итак, вкратце - Как разрешить редактирование несвязанных столбцов в связанной Flexgrid?

ответ

1

В конце концов я решил это, прочитав невероятно бесполезный пример C1 о том, как использовать несвязанные поля, я собрал свой собственный код для его обработки.

Поскольку я использовал списки, созданные из Linq, мне пришлось сначала преобразовать их в datatables, чему помогает FastMember, что делает создание таблицы мгновенным (и довольно безболезненным для кода).

Тогда Хеш и получить/набор событий обработки данных, являющихся загрузки в и из сетки, будьте осторожны, чтобы не давать имена ни несвязанных столбцов или сетка не делают:

Hashtable _hash = new Hashtable(); 

    private static DataTable CreateTable<T>(List<T> List) 
    { 
     DataTable OutTable = new DataTable(); 
     using (var reader = ObjectReader.Create(List)) 
     { 
      OutTable.Load(reader); 
     } 
     return OutTable; 
    } 

    private void c1FlexGrid1_GetUnboundValue(object sender, C1.Win.C1FlexGrid.UnboundValueEventArgs e) 
    { 
     DataRowView drv = (DataRowView)c1FlexGrid1.Rows[e.Row].DataSource; 

     e.Value = _hash[e.Row.ToString() + "|" + e.Col.ToString()]; 
    } 

    private void c1FlexGrid1_SetUnboundValue(object sender, C1.Win.C1FlexGrid.UnboundValueEventArgs e) 
    { 
     DataRowView drv = (DataRowView)c1FlexGrid1.Rows[e.Row].DataSource; 
     _hash[e.Row.ToString() + "|" + e.Col.ToString()] = e.Value; 
    } 
Смежные вопросы