Dynamic table columns

纵然是瞬间 提交于 2021-02-10 06:53:30

问题


How should I proceed when I want to generate table from list of lists which contains only strings(ex. data from csv). Names of columns don't matter. From all examples provided I saw only binding table items to specific model(which doesn't fit there as I have unknown number and names of columns).


回答1:


If you already know the column names and data type, I would suggest to hard code that. If you know nothing about the format and simply want to create a TableView with completely dynamic columns, you can use the index in the csv data as an extractor to create StringProperty values for your data:

class MyView : View() {
    val data = FXCollections.observableArrayList<List<String>>()
    val csvController: CsvController by inject()

    init {
        runAsync {
            csvController.loadData()
        } ui { entries ->
            // Generate columns based on the first row
            entries.first().forEachIndexed { colIndex, name ->
                root.column(name, String::class) {
                    value { row ->
                        SimpleStringProperty(row.value[colIndex])
                    }
                }
            }

            // Assign the extracted entries to our list, skip first row
            data.setAll(entries.drop(1))
        }
    }

    override val root = tableview(data)
}

class CsvController : Controller() {
    // Load data from CSV file here, we'll use som static data
    // where the first row is the headers
    fun loadData() = listOf(
            listOf("Name", "Age"),
            listOf("John", "42"),
            listOf("Jane", "24")
    )
}

This approach would only be good for visualizing the data in a CSV file. If you need to edit or manipulate the data, knowledge of the data types up front would yield a less flimsy application IMO :)



来源:https://stackoverflow.com/questions/46734946/dynamic-table-columns

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!