使用递归函数从表中加载树视图节点很简单,但对于大数据来说需要很长时间。
我有一个包含以下字段的表:id、title、parentid :将树视图节点保持在 N 级。
该表有超过 70000 行。当我从此表中填充树视图时,需要很长时间(大约 9 分钟)才能完成。
有没有更好的解决方案来提高加载速度?
我想更改树视图中所选项目的颜色,即使所选项目没有聚焦。我正在使用 DrawoNode 来实现此目的。但我的 DrawNode 事件没有触发。可能是什么问题呢?这是我的代码:
SolidBrush greenBrush = new SolidBrush(Color.Green);
SolidBrush redBrush = new SolidBrush(Color.Red);
private void tvVouchers_DrawNode(object sender, DrawTreeNodeEventArgs e)
{
if (e.Node.IsSelected)
{
if (tvVouchers.Focused)
e.Graphics.FillRectangle(greenBrush, e.Bounds);
else
e.Graphics.FillRectangle(redBrush, e.Bounds);
}
else
e.Graphics.FillRectangle(Brushes.White, e.Bounds);
e.Graphics.DrawRectangle(SystemPens.Control, e.Bounds);
TextRenderer.DrawText(e.Graphics,
e.Node.Text,
e.Node.TreeView.Font,
e.Node.Bounds,
e.Node.ForeColor);
}
Run Code Online (Sandbox Code Playgroud) 有没有办法从 TTreeViewItem 中删除所有子项?我尝试过DeleteChildren,但这会导致崩溃。
我以为这是一个简单的问题,结果却产生了更多的问题。这就是为什么我解释我正在尝试做的事情。
我的应用程序尝试在 Delphi XE5 FMX 中生成目录树。我使用 TTreeView 来实现这一点。它首先生成一个驱动器列表,所有驱动器都属于 TTreeViewItem。当用户单击某个项目时,下面的目录将添加到该目录中,并且单击的 TTreeViewItem 将展开。当用户再次单击时,TTreeViewItem 就会崩溃。这有一个警告:下次用户单击同一个 TTreeViewItem 时,目录列表将添加到现有目录中,请参见下图。为了防止这种情况,我想首先清除当前列表。

当我尝试使用 TreeViewItem.DeleteChildren 从 TTreeViewItem 删除子项时,我在另一个位置遇到异常,请参见下图。

至于一些问题:是的,我确信我只添加了 TTreeViewItems,这是我分配 OnClick 事件(import_directory_click)的唯一控件。为了确定起见,我已经添加了完整的代码并注释掉了非必需的内容。
我希望有人告诉我这个功能已经存在(找不到它),但即便如此我仍然想知道如何管理 TTreeView。
procedure TMain.import_initialize;
var
Item: TTreeViewItem;
drive: Char;
start: string;
begin
Directory_Tree.Clear;
{$IFDEF MSWINDOWS}
// When Windows, just present a list of all existing drives
for drive := 'C' to 'Z' do
begin
// A drive exists when its root directory exists
start := drive + ':\';
if TDirectory.Exists (start) then …Run Code Online (Sandbox Code Playgroud) iid它的目的是当用户单击某个项目并将其打印出来时获取树视图项目的 ,但由于某种原因identify()没有收到 event.y 变量,也许?
import tkinter as tk
from tkinter import ttk
class App:
def __init__(self):
self.root = tk.Tk()
self.tree = ttk.Treeview()
self.tree.pack(side="top", fill="both")
self.tree.bind("<<TreeviewSelect>>", self.tree_click_event)
for i in range(10):
self.tree.insert("", "end", text="Item %s" % i)
self.root.mainloop()
def tree_click_event(self, event):
iid = self.tree.identify(event.x,event.y)
print (iid)
if __name__ == "__main__":
app = App()
Run Code Online (Sandbox Code Playgroud)
单击树视图中的项目后,错误为:
TypeError: identify() missing 1 required positional argument: 'y'
Run Code Online (Sandbox Code Playgroud)
为了响应 @TessellationHeckler 的评论,基于链接对代码进行的编辑不会产生错误,但仍然不会打印出iid:
def tree_click_event(self, event):
item = self.tree.identify('item', event.x,event.y)
print (item)
Run Code Online (Sandbox Code Playgroud)
感谢您接受@CommonSense的答案,总结看来我需要使用 self.tree.bind('<1>', …
我有一个TreeView控件,允许用户根据关键字过滤树中的项目。VirtualizingStackPanel.IsVirtualizing="True" VirtualizingStackPanel.VirtualizationMode="Recycling"我的树上有它并且它ItemsSource是数据绑定的。我TreeViewItem的Visibility设置如下:
<Setter Property="Visibility" Value="{Binding IsVisible, Converter={StaticResource BooleanToVisibilityConverter}}"/>
该树在未过滤时的性能非常好,但在加载具有大量隐藏项目的树项目时,我发现性能受到很大影响。从我在 VS 的诊断工具中看到的情况来看,在我看来,MyTreeViewItem试图加载它的不可见子项,即使它们不可见,这会导致内存和 CPU 因加载大量不可见项而受到影响。有谁之前经历过这个吗?有没有办法可以覆盖实现虚拟树项目的默认逻辑,以便隐藏项目不会被加载?
我正在为我的项目设置 vuetify 的树视图组件。我单击了树视图的文件夹对象,打开了每个对象。但我没有设置“全部打开”选项。
我的项目基于 vue cli 3,我的 ESLint 配置是“airbnb”。
模板 :
<v-card class="mx-auto">
<v-sheet class="pa-1 tree__resources lighten-2">
<v-treeview
:active.sync="active"
:open.sync="open"
:items="items"
item-key="id"
activatable
active-class="primary--text"
open-on-click
return-object>
<template v-slot:prepend="{ item, open }">
<v-icon v-if="item.type == 'directory'">
{{ open ? 'mdi-folder-open' : 'mdi-folder' }}
</v-icon>
<v-icon v-else>
{{ files[item.type] }}
</v-icon>
</template>
</v-treeview>
</v-sheet>
</v-card>
Run Code Online (Sandbox Code Playgroud)
脚本:
export default {
data: () => ({
active: [],
open: [],
items: ["JSON DATA"],
files: {
html: 'mdi-language-html5',
js: 'mdi-nodejs',
json: 'mdi-json',
md: 'mdi-markdown',
pdf: 'mdi-file-pdf', …Run Code Online (Sandbox Code Playgroud) 我是一个Web开发新手,我想使用VS2019构建一个非常简单的网站,基于MVC结构。我需要在网页中创建一个树视图,具有可选择的节点,尽可能简单。
我在加载数据、填充到任何结构/类方面没有问题。但是,我不知道如何在网页中显示树视图。
我已经找了四个小时了。我看到很多js树插件,很多NuGet中的TreeView控制器。我只想要一个简单的树,最好来自微软,而不是任何其他第三方。我看到一个 TreeView WebControl,但它似乎适用于 Web 表单应用程序 (.aspx)。
请不要告诉我去网上搜索,因为我真的很努力地尝试过。十分感谢!
如果微软没有现成的东西可以在cshtml中使用,请确认这一点,我将停止搜索,如果可能的话,请推荐一种最容易学习和使用的TreeView使用方式。
jstree / Telerik / ???
当我垂直和水平调整窗口大小时,如何使 Treeview 调整大小并将 Sizegrip 保持在窗口的角落?我使用了框架,设置sticky =“ns”来调整窗口中框架的大小,并填充='BOTH',expand=True来调整框架中Treeview的大小。
from tkinter import * # Python interface to the Tk GUI toolkit
from tkinter import filedialog # open file
from tkinter import ttk # Tk themed widget set
root = Tk()
#menu itmes removed for space
win2 = Toplevel(master=root) # create a new top level window
frame1 = Frame(win2)
frame2 = Frame(win2)
frame3 = Frame(win2)
scrollbar = Scrollbar(frame1) # put a scrolbar widget on the right side of the window
scrollbar.pack(side = RIGHT, fill …Run Code Online (Sandbox Code Playgroud) 再会!
有没有办法在 Odoo 的树视图上方添加一个按钮?
每当用户单击按钮时,我想运行一个函数。
如果这是不可能的,你能帮我提供替代方案吗?
这是我的代码:
'''<?xml version="1.0" encoding="utf-8"?>
<odoo>
<record id="account_payment_import_view_tree" model="ir.ui.view">
<field name="name">account.payment.import.view.tree</field>
<field name="model">account.payment.import</field>
<field name="arch" type="xml">
<tree string="Payment Imports" decoration-info="payment_id != False" decoration-danger="error_msg != False">
<field name="transaction_date"/>
<field name="facts_id"/>
<field name="paid_in_lei"/>
<field name="paid_in_euro"/>
<field name="amount"/>
<field name="account"/>
<field name="account_no"/>
<field name="document_no"/>
<field name="details_bk_statement"/>
<field name="error_msg"/>
<field name="invoice_number" invisible="1"/>
<field name="payment_id" widget="many2onebutton" invisible="1"/>
<field name="invoice_id" widget="many2onebutton" invisible="1"/>
<field name="company_id" invisible="1"/>
<field name="currency_id" invisible="1"/>
</tree>
</field>
</record>
<record id="account_payment_import_action" model="ir.actions.act_window">
<field name="name">Payment Imports</field>
<field name="res_model">account.payment.import</field>
<field name="view_mode">tree</field> …Run Code Online (Sandbox Code Playgroud) treeview ×10
c# ×4
delphi ×2
python ×2
tkinter ×2
ado ×1
asp.net-mvc ×1
button ×1
database ×1
firemonkey ×1
javascript ×1
odoo ×1
odoo-13 ×1
performance ×1
tree ×1
vue.js ×1
vuetify.js ×1
winforms ×1
wpf ×1