因此,我设法按照给定的顺序获得了项目列表,以便正确地填充数据库。当转换项目以填充显示订单中包括的项目的listctrl小部件时.......我明白了:

左侧窗口显示当您添加第一个项目时发生的情况...右窗口是我的问题所在。它基本上覆盖了第一项的文本,并添加了一个空白列。但是,价格会适当地增加,并且所有项目都会正确地添加到sql数据库中……所以我的问题在于我如何填充我的列表
下面显示的代码是填充前面显示的列表ctrl的函数...我似乎找不到我哪里错了.有什么想法吗?
用于重启列表的代码
def refresh_list2(self, event):
"""Place the names of each ItemEntry into the list"""
index = 0
self.entrydict = {}
self.list2.DeleteAllItems()
for entry in self.ordite.list_entries():
if entry.Order_ID == self.entry.Order_ID:
self.list2.InsertStringItem(index,self.entry.Order_ID)
self.list2.SetStringItem(index,1,self.entryit.Item_ID)
self.list2.SetStringItem(index,2,str(self.entryit.Item_Price))
self.list2.SetStringItem(index,3,str(self.entryit.Item_Qty))
self.entrydict[index] = entry
index += 1用于将项插入数据库的代码
def add_item(self, event):
"""Add a new entry to the Order_Date ite"""
# start out with blank, generic Entry
self.entryit = oi.OrderItemEntry(self.entry.Order_ID,"","","0")
self.endiag = AddItemOrder(self,self.entryit)
self.endiag.ShowModal()
self.ordite.add_entry(self.entry.Order_ID,
str(self.entryit.Item_ID),
str(self.entryit.Item_Price),
str(self.entryit.Item_Qty) )
self.refresh_list2(None)
self.addPrice(None)我还在考虑在后端创建一个函数,根据给定的order_ID存储item对象的过滤列表
发布于 2013-05-23 21:46:19
哦,wx.ListCtrl的乐趣。;-)
我花了一个多小时来解决这些问题,然后围绕它编写了一个包装器类,从而大大减轻了它的痛苦。
你的refresh_list2()代码有几个问题...
首先,InsertStringItem()方法总是在指定的index之前插入项目,所以如果想要追加到列表中,必须将index设置为大于或等于列表中当前项目数量的任意值- sys.maxint工作得很好。
其次,InsertStringItem()将返回它插入该项的索引,因此您必须在后续的SetStringItem()调用中使用该值。
试试这样的..。
def refresh_list2(self, event):
"""Place the names of each ItemEntry into the list"""
self.entrydict = {}
self.list2.DeleteAllItems()
for entry in self.ordite.list_entries():
if entry.Order_ID == self.entry.Order_ID:
index = self.list2.InsertStringItem(sys.maxint, self.entry.Order_ID)
self.list2.SetStringItem(index, 1, self.entryit.Item_ID)
self.list2.SetStringItem(index, 2, str(self.entryit.Item_Price))
self.list2.SetStringItem(index, 3, str(self.entryit.Item_Qty))
self.entrydict[index] = entry...which应该可以获得所需的结果,但是如果您随后从列表中删除了一项,self.entrydict可能会出现问题,因为索引值可能会更改。
更新
不知道你在做什么,但是下面这个自包含的例子对我来说很有效……
import sys
import wx
data = (('O0012', '1001', '235.0', '1'),
('O0012', '1002', '600.0', '2'))
app = wx.App(redirect=False)
frame = wx.Frame(None)
lc = wx.ListCtrl(frame, style=wx.LC_REPORT)
lc.InsertColumn(0, 'Order ID')
lc.InsertColumn(1, 'Item ID')
lc.InsertColumn(2, 'Item Price')
lc.InsertColumn(3, 'Item Qty')
for a, b, c, d in data:
index = lc.InsertStringItem(sys.maxint, a)
lc.SetStringItem(index, 1, b)
lc.SetStringItem(index, 2, c)
lc.SetStringItem(index, 3, d)
frame.Show()
app.MainLoop()更新#2
阿。我想您的意思是插入来自本地entry变量的项,而不是实例属性...
def refresh_list2(self, event):
"""Place the names of each ItemEntry into the list"""
self.entrydict = {}
self.list2.DeleteAllItems()
for entry in self.ordite.list_entries():
if entry.Order_ID == self.entry.Order_ID:
index = self.list2.InsertStringItem(sys.maxint, entry.Order_ID)
self.list2.SetStringItem(index, 1, entry.Item_ID)
self.list2.SetStringItem(index, 2, str(entry.Item_Price))
self.list2.SetStringItem(index, 3, str(entry.Item_Qty))
self.entrydict[index] = entryhttps://stackoverflow.com/questions/16712236
复制相似问题