Невозможно получить данные строки, когда Datagrid (SfDataGrid) сгруппированAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Невозможно получить данные строки, когда Datagrid (SfDataGrid) сгруппирован

Сообщение Anonymous »

Я не получаю точные данные строки при попытке получить их, когда столбец сгруппирован. Например, он дает мне данные второй строки, пока я пытаюсь получить данные первой строки. Причина этого в том, что список строк источника данных и длина списка сетки данных не совпадают, поскольку сетка данных содержит дополнительные строки заголовков групп.
Как я могу решить эту проблему?
Как я могу решить эту проблему?
Как я могу решить эту проблему?
Как я могу решить эту проблему? p>
Воспроизведите проблему.
1. Сначала импортируйте пакет Sfdatagrid.
import 'dart:developer';

import 'package:flutter/material.dart';
import 'package:syncfusion_flutter_datagrid/datagrid.dart';

void main() {
runApp(MyApp());
}

class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: JobHistoryPage(),
);
}
}

class JobHistoryPage extends StatelessWidget {
@override
Widget build(BuildContext context) {
// Dummy job history list
List dummyJobHistoryList = List.generate(
20,
(index) => JobHistory(
jobOrderNo: "Job_$index",
fpoNo: "FPO_$index",
item: "ItemAbcdEfg_$index",
creationDate: "2024-12-19",
planStartDate: "2024-12-20",
planCmplDate: "2024-12-25",
fpoQty: index * 100,
goodQty: index * 90,
badQty: index * 10,
trnQty: index * 80,
rackQty: index * 70,
madeP: (index % 100).toDouble(),
dueMadeP: (100 - index % 100).toDouble(),
customerName: "Customer_$index",
customerPo: "PO_$index",
buyerName: "Buyer_$index",
),
);

final jobHistoryDataSource = JobHistoryDataSource(
jobHistoryData: dummyJobHistoryList,
);
jobHistoryDataSource.addColumnGroup(
ColumnGroup(name: "Job Order No", sortGroupRows: false));

return Scaffold(
appBar: AppBar(
title: const Text("Job History Table"),
),
body: Center(
child: SingleChildScrollView(
child: Padding(
padding: const EdgeInsets.all(8.0),
child: SizedBox(
height: MediaQuery.of(context).size.height * 0.8,
child: JobDetailsTableWidget(
source: jobHistoryDataSource,
),
),
),
),
),
);
}
}

class JobDetailsTableWidget extends StatelessWidget {
const JobDetailsTableWidget({super.key, required this.source});

final JobHistoryDataSource source;

@override
Widget build(BuildContext context) {
return SfDataGrid(
rowHeight: 32,
headerRowHeight: 38,
source: source,
allowExpandCollapseGroup: true,
// autoExpandGroups: false,
columnWidthCalculationRange: ColumnWidthCalculationRange.allRows,
frozenColumnsCount: 2,
groupCaptionTitleFormat: '{Key} - {ItemsCount}',
gridLinesVisibility: GridLinesVisibility.both,
headerGridLinesVisibility: GridLinesVisibility.none,
columnWidthMode: ColumnWidthMode.auto,
shrinkWrapRows: true,
columns: [
...source.rows.first.getCells().map(
(cell) => GridColumn(
visible: !["Job Order No"].contains(cell.columnName),
columnName: cell.columnName,
label: Container(
alignment: Alignment.center,
child: Text(
cell.columnName,
style: const TextStyle(fontWeight: FontWeight.bold),
),
),
),
)
],
onCellTap: (details) {
if (details.rowColumnIndex.columnIndex == 2) {
log(source._jobHisRowData[details.rowColumnIndex.rowIndex - 1]
.getCells()
.elementAt(2)
.value);
}
},
);
}
}

class JobHistoryDataSource extends DataGridSource {
/// Creates the employee data source class with required details.
JobHistoryDataSource({required List jobHistoryData}) {
_jobHisData = jobHistoryData;
_jobHisRowData = jobHistoryData.map((e) {
Map map = e.toMapForTab();
return DataGridRow(
cells: [
...List.generate(
map.length,
(index) {
return DataGridCell(
columnName: map.entries.elementAt(index).key,
value: map.entries.elementAt(index).value,
);
},
)
],
);
}).toList();
}

List _jobHisRowData = [];
List _jobHisData = [];
@override
List get rows => _jobHisRowData;
List get jobHisData => _jobHisData;
@override
DataGridRowAdapter buildRow(DataGridRow row) {
final int rowIndex = effectiveRows.indexOf(row);

return DataGridRowAdapter(
cells: row.getCells().map((e) {
LinearGradient? getColor() {
if (e.columnName == 'Made P %') {
try {
Color fillColor = Colors.green;
double fillPercent = double.parse(e.value
.toString()
.replaceAll('%', '')); // fills for container from side
if (fillPercent

Подробнее здесь: https://stackoverflow.com/questions/793 ... is-grouped
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Невозможно получить данные строки, когда Datagrid (SfDataGrid) сгруппирован
    Anonymous » » в форуме Android
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • Является ли переключение от Syncfusion sfdatagrid на DataTable2 хорошим выбором для пользовательских ячеек, сортировки,
    Anonymous » » в форуме Android
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • PHP с SQLITE3 не может быть сгруппирован для Android
    Anonymous » » в форуме Php
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous
  • PHP с SQLITE3 не может быть сгруппирован для Android
    Anonymous » » в форуме Android
    0 Ответы
    6 Просмотры
    Последнее сообщение Anonymous
  • PHP с SQLITE3 не может быть сгруппирован для Android
    Anonymous » » в форуме Php
    0 Ответы
    5 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Android»