Невозможно установить значения для несвязанных столбцов в C1 Flexgrid

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

В настоящее время 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);
  }
}

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

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


person AllMadHare    schedule 09.12.2013    source источник


Ответы (1)


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

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

Затем хэш-таблица и события get/set обрабатывают данные, загружаемые в сетку и из нее, будьте осторожны, чтобы не давать имена никаким несвязанным столбцам, иначе сетка не будет отображаться:

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;
    }
person AllMadHare    schedule 29.12.2013