如果我在虚拟模式下使用ListView,那么,据我所知,列表视图只跟踪列表中的少量项目.当用户滚动它时,它动态地检索它需要从虚拟列表中显示的项目.
但是如果在主列表中添加或删除了一个项目呢?如果在列表视图显示的索引范围之外添加/删除项目,那么我将假设当用户滚动到该索引时列表视图将显示添加/缺失的项目.它是否正确?但是,如果在用户当前正在查看的索引范围中添加/删除项目,该怎么办?如何触发列表视图以刷新当前正在查看的项目以显示新/缺少的项目?
仅供参考:如果有任何不同,我正在使用ObjectListView.
我的应用程序使用Q和A键移动到ObjectListView中的下一个项目,只要用户不使用其中一个列标题对列表项进行排序,该项就可以正常工作.如果用户已排序,则按Q/A键会使列表跳转到列表项,因为它似乎使用原始订单,而不是当前订单.
所以我正在寻找一种解决方案,即使在用户排序后,用户也可以移动到下一个项目.我目前拥有的代码(仅适用于A键)如下:
if (e.KeyCode == Keys.A)
{
OLVListItem next = listSession.GetNextItem(listSession.SelectedItem);
if (next == null)
{
return;
}
listSession.SelectedObject = (Session)next.RowObject;
listSession.EnsureModelVisible((Session)next.RowObject);
}
Run Code Online (Sandbox Code Playgroud) 我有一个包含文本框和按钮的自定义控件.我使用自定义控件作为ObjectListView中特定列的编辑控件.
在CellEditStarting事件上我做:
private void datalistViewProducts_CellEditStarting(object sender, CellEditEventArgs e)
{
var ctl = (MyCustomControl)e.Control;
e.Control = ctl;
}
Run Code Online (Sandbox Code Playgroud)
ObjectListView的ConfigureControl方法已经调用了控件的Select方法.如果我有一个直接从标准TextBox继承的usercontrol,它工作正常.
所以我将以下代码添加到我的usercontrol:
public new void Select()
{
textBox.Select();
}
Run Code Online (Sandbox Code Playgroud)
但是,如上所述具有用户控件,该Select方法不会将焦点移动到文本框.
我在这里错过了什么?
我使用ObjectListView。并使用方法 RefreshObject() 更新唯一修改的对象。
// The difference between associations and updatedAssociations is only in
// one item, which ID field remains the same.
// So i find an updated item by ID in the associations (before updating).
//And say Object ListView to to refresh this item.
var associationToUpdate = associations.References.Where(
x => x.ID == associationIDToUpdate).FirstOrDefault();
olvAssociations.RefreshObject(associationToUpdate);
// And only after this set the model to updated model
associations = updatedAssociations;
Run Code Online (Sandbox Code Playgroud)
但什么也没有发生。有人知道这是怎么回事吗?
我创建了一个ObjectListView包含子项的子项CheckBoxes.这很简单,但问题是出于某种原因,它会在复选框旁边显示True/False值.我可以用设置宽度23-30来隐藏它.它就像是使用数据库中的true/false值,而不仅仅是将它用于复选框,它还显示它.

那么任何摆脱它的方法呢?
我有一个简单的问题,我无法自己解决.
我有一个ObjectListView填充了我的一些对象.但除此之外,我想要另一列,默认文本为"删除".单击该列时,应删除选定的行.我怎么做?
我学习使用ObjectListView在 C# 中来显示我的 MySQL 数据,我尝试在列内绘制/放置一个删除按钮,以便当我单击它时,它将删除该行。
我知道如何在列内绘制图像或进度条,但问题是我不知道如何在其中放置按钮。我在谷歌搜索时,发现有人说必须使用自定义渲染器来绘制按钮,但我不知道如何。
如何将按钮放在列内?
我在winforms应用程序中使用ObjectListView,我遇到了一个问题,在我的列表中我不会,如果我点击我的行的任何列,它应该被选中(所有行).
这是我的代码:
olvSongs.AllColumns.Add(this.titleColumn);
olvSongs.AllColumns.Add(this.typeColumn);
olvSongs.AllColumns.Add(this.addedColumn);
olvSongs.Anchor = ((System.Windows.Forms.AnchorStyles)((((System.Windows.Forms.AnchorStyles.Top | System.Windows.Forms.AnchorStyles.Bottom)
| System.Windows.Forms.AnchorStyles.Left)
| System.Windows.Forms.AnchorStyles.Right)));
olvSongs.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
this.titleColumn,
this.typeColumn,
this.addedColumn});
olvSongs.Location = new System.Drawing.Point(6, 40);
olvSongs.Name = "olvSongs";
olvSongs.ShowGroups = false;
olvSongs.Size = new System.Drawing.Size(638, 190);
olvSongs.SmallImageList = this.imageList1;
olvSongs.TabIndex = 7;
olvSongs.UseAlternatingBackColors = true;
olvSongs.UseCompatibleStateImageBehavior = false;
olvSongs.UseFiltering = true;
olvSongs.View = System.Windows.Forms.View.Details;
Run Code Online (Sandbox Code Playgroud)
在这里,我可以选择行,只有我选择titleColumn.
这是展示我得到的图片(仅在第一列上选择):

在ObjectListView中构建组时,如何更改组的颜色?默认情况下,组以深蓝色前景色中的深蓝色线显示。我怎样才能改变它?