flutter 如何在Flet中使用AlertDialog编辑DataTable数据

cxfofazt  于 2023-10-22  发布在  Flutter
关注(0)|答案(1)|浏览(193)

我正在做一个CRUD,我想使用AlertDialog编辑DataTable中的数据,但我只是让AlertDialog在没有数据的情况下加载,我给你留下了一个图像和代码,希望得到及时的帮助或建议,谢谢。

import flet as ft
from flet import *

def main(page: ft.Page):

    codpro = TextField(label="CÓDIGO PRODUCTO")
    nompro = TextField(label="NOMBRE PRODUCTO")

    #combo de categoria
    ddcate = ft.Dropdown(label="CATEGORIA",
        width=150,
        options=[
            ft.dropdown.Option("dulce"),
            ft.dropdown.Option("salado"),
        ],
    )

    #combo de peso
    ddpeso = ft.Dropdown(label="PESO",
        width=100,
        options=[
            ft.dropdown.Option("KG"),
            ft.dropdown.Option("G"),
        ],
    )


    #DATATABLE
    tablaproducto = DataTable(
                  #CABECERA DE LAS CALUMNAS  
                  columns=[
                      DataColumn(Text("CÓDIGO")),
                      DataColumn(Text("PRODUCTO")),
                      DataColumn(Text("CATEGORÍA")),
                      DataColumn(Text("PESO")),
                      DataColumn(Text("ACCIONES")),
                  ],
                  #FILAS  
                  rows=[]          
    )

    #FUNCION ELIMINAR
    def eliminar(e):
        tablaproducto.rows.remove(tablaproducto.rows[0])

        #MENSAJE con Barra inferior
        page.snack_bar = SnackBar(
            Text("SE ELIMINO DATO", size = 30),
            bgcolor = "red",
            duration= 500,            
        )
        page.snack_bar.open = True
        #FIN DEL MENSAJE inferior
 
        page.update()

    #FUNCION GUARDAR
    def guardar(e):
        pass

    # Crear Dialog
    dialog = AlertDialog(
        title=Text("Editar datos"),
        content=Column([
            nompro,
            ddcate,
            ddpeso,
        ]),
        actions=[
            TextButton("Guardar",
                       on_click=guardar
                       )
        ]
    )

    #Funcion EDITAR
    def editar(e):
        tablaproducto.rows[nompro.value].cells[1].content = TextField(nompro.value)
        

        page.dialog = dialog
        dialog.open = True
        page.update()

    

    #FUNCION para AGREGAR     
    def agregar(e):
        
        tablaproducto.rows.append(
            DataRow(
                cells=[
                    DataCell(Text(codpro.value)),
                    DataCell(Text(nompro.value)),
                    DataCell(Text(ddcate.value)),
                    DataCell(Text(ddpeso.value)),
                    DataCell(
                        Row([
                        IconButton("delete", 
                                   icon_color ="red",
                                   on_click = eliminar,
                                    ),
                        IconButton("create", 
                                   icon_color ="red",
                                   on_click = editar,
                                   ),    
                            ])
                        ),
                ]
            )
        )
        #MENSAJE con Barra inferior
        page.snack_bar = SnackBar(
            Text("DATO INGRESADO", size = 30),
            bgcolor = "green",
            duration= 500,
        )
        page.snack_bar.open = True
        #FIN DEL MENSAJE

        #Limpiar los controles
        codpro.value = ""
        nompro.value = ""
        ddcate.value = ""
        ddpeso.value = ""

        page.update()

       
    #Boton AGREGAR
    BtnAgregar = ElevatedButton(
        text="Agregar", 
        bgcolor="blue",
        color="white",
        on_click=agregar
        )
    

    page.add(
        Column([
            Text("PRODUCTOS",size=30,weight="bold"),
            codpro, nompro,ddcate, ddpeso,
            Row([BtnAgregar]),
            tablaproducto
 
            ])
 
        )

ft.app(target=main)

enter image description here
给我留言,帮帮我。
tablaproducto.rows[nompro.value].cells[1].content = TextField(nompro.value)TypeError:列表索引必须是整数或切片,而不是str
任何想法或任何人都有一个example。我希望你能及时帮助我

brgchamk

brgchamk1#

我能够通过创建新的控件来从DataTable中检索数据来解决数据编辑问题但它只对我适用于一个记录,当我添加2个或更多记录时,它总是从第一个记录返回数据我分享代码,一些建议我可以解决这个问题我与他们分享代码

#CREATE NEW CONTROLS FOR EDIT
    edit_nomprotxt = TextField(label="NOMBRE PRODUCTO")

    edit_ddcate = ft.Dropdown(label="CATEGORIA",
        width=150,
        options=[
            ft.dropdown.Option("dulce"),
            ft.dropdown.Option("salado"),
        ],
    )

    edit_ddpeso = ft.Dropdown(label="PESO",
        width=100,
        options=[
            ft.dropdown.Option("KG"),
            ft.dropdown.Option("G"),
        ],
    )

报警对话框

dialog = AlertDialog(
        title=Text("Editar datos"),
        content=Column([
            edit_nomprotxt,
            edit_ddcate,
            edit_ddpeso,
            
            
        ]),
        actions=[
            TextButton("Guardar",
                       on_click=guardar
                      )
        ]
    )

功能编辑

def editar(e):

        edit_nomprotxt.value = tablaproducto.rows[0].cells[1].content.value
        edit_ddcate.value = tablaproducto.rows[0].cells[2].content.value
        edit_ddpeso.value = tablaproducto.rows[0].cells[3].content.value

        page.dialog = dialog
        dialog.open = True
        page.update()

相关问题