json - How can I get data on TableView? -


all.

now develop task management application using go programming language , walk("windows application library kit" go programming language).

the application has function of following ① ②.

①read data json file, , display data on tableview(tableview component of walk).
②write data on tableview json file.

i develop function of ①. cannot develop function of ②, because cannnot data on tableview.

how can data on tableview?

【version】
go : 1.4.2
walk : commit baac4d4

【source code】

package main  import (     "reflect"     "fmt"     "log"     "os"     "encoding/json"     "sort"      "github.com/lxn/walk"     . "github.com/lxn/walk/declarative"     //"strings" )  type task struct {     taskid string     taskno string     taskname string     manday string     term string     mandayday string     startdate string     enddate string     progress string }  type taskmodel struct {     walk.tablemodelbase     walk.sorterbase     sortcolumn int     sortorder walk.sortorder     items []task }  func newtaskmodel() *taskmodel {     t := new(taskmodel)      t.items = make([]task, 3)      var tasks []task     tasks = read("")      := 0; < len(tasks); i++ {         var task task         task = tasks[i]         t.items[i] = task     }      t.publishrowsreset()      return t }  func (m *taskmodel) rowcount() int {     return len(m.items) }  func (m *taskmodel) len() int {     return len(m.items) }  func (m *taskmodel) value(row, col int) interface{} {     item := m.items[row]      switch col {         case 0:             return item.taskid         case 1:             return item.taskno         case 2:             return item.taskname         case 3:             return item.manday         case 4:             return item.term         case 5:             return item.mandayday         case 6:             return item.startdate         case 7:             return item.enddate         case 8:             return item.progress     }      panic("unexpected col") }  func (m *taskmodel) sort(col int, order walk.sortorder) error {     m.sortcolumn, m.sortorder = col, order      sort.sort(m)      return m.sorterbase.sort(col, order) }  func (m *taskmodel) less(i, j int) bool {     a, b := m.items[i], m.items[j]      c := func(ls bool) bool {         if m.sortorder == walk.sortascending {             return ls         }          return !ls     }      switch m.sortcolumn {         case 0:             return c(a.taskid < b.taskid)         case 1:             return c(a.taskno < b.taskno)         case 2:             return c(a.taskname < b.taskname)         case 3:             return c(a.manday < b.manday)         case 4:             return c(a.term < b.term)         case 5:             return c(a.mandayday < b.mandayday)         case 6:             return c(a.startdate < b.startdate)         case 7:             return c(a.enddate < b.enddate)         case 8:             return c(a.progress < b.progress)     }      panic("error") }  func (m *taskmodel) swap(i, j int) {     m.items[i], m.items[j] = m.items[j], m.items[i] }  func read(filepath string) []task{      file, err := os.open("c:/dev/xampp/htdocs/workspace/samplegoproject/src/main/task.json")     //file, err := os.open(filepath)      if err != nil {         log.fatal(err)     }      defer file.close()      var tasks []task      decoder := json.newdecoder(file)     //json.newdecoder(file)      //fmt.print(tasks)      //err = decoder.decode(&tasks)     decoder.decode(&tasks)     if err != nil {         log.fatal(err)     }      //fmt.print(tasks)      return tasks; }  func write(filepath string, mw *mymainwindow) {      var children *walk.widgetlist     children = mw.mainwindow.children()      var child walk.widget     child = children.at(0)      := reflect.typeof(child)     fv := reflect.valueof(child).convert(to).interface()      //tableview := fv.type().in(0)     //var tableview tableview     //tableview := child.cursor()      //fmt.print(child)      //fmt.println(tableview)      fmt.println(to)     fmt.println(fv)        //r := fv.interfacedata()     //fmt.println(r)     //fmt.println(reflect.valueof(child).convert(fv))      file, err := os.create("c:/dev/xampp/htdocs/workspace/samplegoproject/src/main/task2.json")     if err != nil {         log.fatal(err)     }      defer file.close()      //var tasks []task      encoder := json.newencoder(file)      err = encoder.encode(fv)     if err != nil {         log.fatal(err)     }  }  type mymainwindow struct {     *walk.mainwindow     prevfilepath string }  func main() {      model := newtaskmodel()      mw := new (mymainwindow)      var openaction, saveaction *walk.action      if err:= (mainwindow{         assignto: &mw.mainwindow,         title: "wbs",         menuitems: []menuitem{             menu {                 text: "&file",                 items: []menuitem{                     action{                         assignto: &openaction,                         text: "&open",                         ontriggered: mw.openaction_triggered,                     },                     action{                         assignto: &saveaction,                         text: "&save",                         ontriggered: mw.saveaction_triggered,                     },                     separator{},                     action{                         text: "&exit",                         ontriggered: func() {                             mw.close()                           },                     },                 },             },         },         minsize: size{800, 400},         layout: vbox{},         children: []widget{             tableview {                 columns: []tableviewcolumn{                     {title: "task id"},                     {title: "task no"},                     {title: "task name"},                     {title: "man day"},                     {title: "term"},                     {title: "man day day"},                     {title: "start date"},                     {title: "end date"},                     {title: "progress"},                 },                 model: model,             },         },     }.create()); err != nil {         //fmt.print(err)         //log.fatal(err)      }      mw.run() }  func (mw *mymainwindow) openaction_triggered() {     if err := mw.openfile(); err != nil {         log.print(err)     } }  func (mw *mymainwindow) openfile() error {     dlg := new(walk.filedialog)      dlg.filepath = mw.prevfilepath     dlg.filter = "json files|*.json"     dlg.title = "select json file"      if ok, err := dlg.showopen(mw); err != nil {         return err     } else if !ok {         return nil     }      mw.prevfilepath = dlg.filepath      read(mw.prevfilepath)      return nil }  func (mw *mymainwindow) saveaction_triggered() {     if err := mw.savefile(); err != nil {         log.print(err)     } }  func (mw *mymainwindow) savefile() error {     dlg := new(walk.filedialog)      dlg.filepath = mw.prevfilepath     dlg.filter = "json files|*.json"     dlg.title = "input json file name"      if ok, err := dlg.showsave(mw); err != nil {         return err     } else if !ok {         return nil     }      mw.prevfilepath = dlg.filepath      write(mw.prevfilepath, mw)      return nil } 

enter image description here


Comments

Popular posts from this blog

toolbar - How to add link to user registration inside toobar in admin joomla 3 custom component -

linux - disk space limitation when creating war file -

How to provide Authorization & Authentication using Asp.net, C#? -