Я не получаю точные данные строки при попытке получить их, когда столбец сгруппирован. Например, он дает мне данные второй строки, пока я пытаюсь получить данные первой строки. Причина этого в том, что список строк источника данных и длина списка сетки данных не совпадают, поскольку сетка данных содержит дополнительные строки заголовков групп.
Как я могу решить эту проблему?
Как я могу решить эту проблему?
Как я могу решить эту проблему?
Как я могу решить эту проблему? 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
Невозможно получить данные строки, когда Datagrid (SfDataGrid) сгруппирован ⇐ Android
Форум для тех, кто программирует под Android
1734929003
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
Подробнее здесь: [url]https://stackoverflow.com/questions/79302117/unable-to-get-row-data-when-datagridsfdatagrid-is-grouped[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия