我正在使用Grammarian的ObjectListView.我将旧的列表视图更改为了,但我所做的只是填写项目.但是当应用程序启动并且我的鼠标在列表视图上时,它会立即抛出异常:
System.InvalidCastException was unhandled
Message="Unable to cast object of type 'System.Windows.Forms.ListViewItem' to type 'BrightIdeasSoftware.OLVListItem'."
Source="ObjectListView"
Run Code Online (Sandbox Code Playgroud)
如何解决这个问题?
如果这很重要,我也使用Win7.
编辑:
我用字典.看起来我需要使用SetObjects方法而不是添加项目.
好的,这很棒,但我只是使用dict.Value集合.我不想通过listview修改数据,只显示.所以我只有一列,列出了所有字符串.这可能吗?
我很感激一个小样本.
我在演示项目中尝试了演示代码,但我无法成功添加新项目.它只是添加新的新NULL组和NULL项.请给我一个简单的示例代码来添加新项目(文本和图像).
谢谢!
哦对不起!我忘了.这是我第一次参加这个网站.我用C#.代码是:
objectListView1.BeginUpdate();
objectListView1.AddObject(new string [] {"Hello","dfdsF" });
objectListView1.EndUpdate();
Run Code Online (Sandbox Code Playgroud)
和
objectListView1.BeginUpdate();
OLVListItem item = new OLVListItem(new string [] {"Hello","dfdsF" });
objectListView1.Items.Add(item);
objectListView1.EndUpdate();
Run Code Online (Sandbox Code Playgroud)
它与ListView和EXListView的区别很大,我可以在创建新项目时定义文本或图像.但在ObjectListView中,我不明白OBJECT?
我在这里得到了ObjectListView和它的演示代码表单http://nchc.dl.sourceforge.net/project/objectlistview/objectlistview/v2.5/ObjectListViewFull-2.5.0.zip
我创建了一个ObjectListView包含子项的子项CheckBoxes.这很简单,但问题是出于某种原因,它会在复选框旁边显示True/False值.我可以用设置宽度23-30来隐藏它.它就像是使用数据库中的true/false值,而不仅仅是将它用于复选框,它还显示它.

那么任何摆脱它的方法呢?
这似乎是一个非常愚蠢的问题,但我无法解决这个问题!如何以编程方式将排序顺序应用于ObjectListView?我的代码很直接:
listOfItems.Add(new ListItem(a, b, c, d));
listOfItems.Add(new ListItem(e, f, g, h));
objectListView.SetObjects(listOfItems);
Run Code Online (Sandbox Code Playgroud)
但是在这一点上我想强制排序,比如说,"第3列提升",我不能为我的生活找到一种方法来做到这一点!
我不想做任何花哨的事情,只是以编程方式模拟用户点击第3列标题的效果,直到它按升序排序.
我Graphics.DrawString在ObjectListView中使用.我需要突出显示字符串中的一些单词(使其背景为黄色).可以这样做吗?
在使用之前Graphics.DrawString,我可以使用DefaultRenderer突出显示.但现在它不起作用.
我Graphics.DrawString在这里使用Task List样本
我ObjectListView用来显示项目列表.但是,当我单击列标题时,列不会被排序.
请参考下面粘贴的代码:
public class Stock
{
public Stock()
{
}
public Stock(string name, double lastPrice, double greenTrend, double redTrend, double lastGreenValue, double lastRedValue)
{
this.Name = name;
this.LastPrice = lastPrice;
this.GreenTrend = greenTrend;
this.RedTrend = redTrend;
this.LastGreenValue = lastGreenValue;
this.LastRedValue = lastRedValue;
}
public string Name
{
get { return name; }
set { name = value; }
}
private string name;
public double LastPrice
{
get { return lastPrice; }
set { lastPrice = value; }
} …Run Code Online (Sandbox Code Playgroud) 试图将图标放在ObjectListview中,这是我应该放置图标的代码片段:
objectListView1.SmallImageList = imageList1;
deleteColumn.IsEditable = true;
deleteColumn.ImageGetter = delegate
{
return 0;
};
deleteColumn.AspectGetter = delegate
{
return "Delete";
};
Run Code Online (Sandbox Code Playgroud)
imageList1已经有了一个图像,这段代码应该在"删除"旁边放一个图标,但它根本没有出现,通过食谱和谷歌查看,我仍然不知道.谁能帮我?
如果需要,这是完整的表单代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Security.Cryptography;
using System.IO;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
objectListView1.AllowDrop = true;
objectListView1.DragEnter += new DragEventHandler(objectListView1_DragEnter);
objectListView1.DragDrop += new DragEventHandler(objectListView1_DragDrop);
objectListView1.CellEditActivation = BrightIdeasSoftware.ObjectListView.CellEditActivateMode.SingleClick;
objectListView1.CellEditStarting += deleteItems;
objectListView1.SmallImageList = imageList1;
deleteColumn.IsEditable = true; …Run Code Online (Sandbox Code Playgroud) 我有以下课程:
public class people
{
public string name { get; set; }
public string hobby { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我想显示一个这样的列表:
no | name | hobby
-----------------------
01 | kim | tv
02 | kate | pc
03 | kim | tv
04 | kate | pc
Run Code Online (Sandbox Code Playgroud)
我知道要实现这一目标的唯一方法是将人们的阶级转变为
public class people
{
public string no{ get; set; }
public string name { get; set; }
public string hobby { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
并循环List<people>设置每个no属性。
有没有更好的方法来添加索引号列?
如果这是一个noob问题,我道歉,但我似乎无法想出这个问题.
我已经定义了一个定义音乐曲目的对象(注意:最初只有ATTRIBUTE和self.ATTRIBUTE.我编辑了这些值以帮助消除混淆.它们对问题没有影响)
class Track(object):
def __init__(self, title, artist, album, source, dest):
"""
Model of the Track Object
Contains the followign attributes:
'Title', 'Artist', 'Album', 'Source', 'Dest'
"""
self.atrTitle = title
self.atrArtist = artist
self.atrAlbum = album
self.atrSource = source
self.atrDest = dest
Run Code Online (Sandbox Code Playgroud)
我使用ObjectListView创建特定目录中的轨道列表
....other code....
self.aTrack = [Track(sTitle,sArtist,sAlbum,sSource, sDestDir)]
self.TrackOlv.AddObjects(self.aTrack)
....other code....
Run Code Online (Sandbox Code Playgroud)
现在我想迭代列表并打印出每个项目的单个值
list = self.TrackOlv.GetObjects()
for item in list:
print item.atrTitle
Run Code Online (Sandbox Code Playgroud)
这失败了,错误
AttributeError: type object 'Track' has no attribute 'atrTitle'
Run Code Online (Sandbox Code Playgroud)
让我感到困惑的是,如果我在对象列表视图显示中突出显示单个项目并使用以下代码,它将正确打印突出显示项目的单个值
list = self.TrackOlv.GetSelectedObject()
print list.atrTitle
Run Code Online (Sandbox Code Playgroud)
编辑:每个请求的完整来源.要查看错误,请浏览到源dir w/.mp3文件,然后单击打印按钮.
#Boa:Frame:Frame1 …Run Code Online (Sandbox Code Playgroud) 我使用ObjectListView而不是标准的ListView是因为我想对列进行自动换行.
我在几个地方读到,为了启用自动换行,我唯一需要的是设置column.wordWrap为true.
我做到了这一点,但它不起作用.
我在这里错过了什么?
编辑: 我现在意识到我需要绘制我的列所有者.我发现这个页面告诉我该怎么做,但我不确定将它放在我的代码中的哪个位置.我也不太确定是否需要在委托中添加某些属性以允许自动换行(通过看起来opf它默认启用它).问题是,我尝试了我在这个页面中找到的东西,一字一句地复制它,我的列表看起来完全一样......
objectlistview ×10
c# ×8
.net ×2
winforms ×2
drawstring ×1
graphics ×1
highlight ×1
icons ×1
ownerdrawn ×1
python ×1
sorting ×1
vb.net ×1
word-wrap ×1
wxpython ×1