我试图使用ObjectListView(WinForm,C#)创建一个简单的列表框。目标是使用单个值(双精度值)和复选框。
我希望能够通过单击来编辑双值,所以这里是我的MyWindow.Designer.cs文件中的相关代码行(我省略了效率的默认值):
this.olvDepths = new BrightIdeasSoftware.ObjectListView();
this.olvColumn1 = ((BrightIdeasSoftware.OLVColumn)(new BrightIdeasSoftware.OLVColumn()));
...
this.olvDepths.CellEditActivation = BrightIdeasSoftware.ObjectListView.CellEditActivateMode.SingleClick;
this.olvDepths.CheckBoxes = true;
this.olvDepths.CheckedAspectName = "IsDefault";
this.olvDepths.FullRowSelect = true;
//
// olvColumn1
//
this.olvColumn1.AspectName = "Depth";
this.olvColumn1.Text = "";
this.olvColumn1.IsEditable = true;
然后我创建了一个班级列表(ShieldingEntry
)并将olvDepths.SetObjects()
与列表一起使用。我的ShieldingEntry
课程如下:
public class ShieldingEntry
{
public double Depth { get; set; }
public bool IsDefault { get; set; }
}
但是,当我点击该字段时,它不会进入编辑模式。我还尝试过DoubleClick,SingleClickAlways和F2Only模式,但他们也没有。
复选框工作正常。
**************我还有其他信息*********************
我已经拉动并构建了ObjectListView源代码,因此我可以逐步完成它。
我在OLV StartCellEdit方法中放置了一个断点,它被调用并且似乎设置并适当地选择控件。它永远不会出现......
正如我在下面的答案的评论中所指出的,我在选项卡式对话框中得到了这个控件,如果我切换到另一个选项卡,然后返回,控件工作正常。
我错过了什么?
答案 0 :(得分:1)
之前我使用过ObjectListView,这就是我必须做的事情:
处理CellEditStarting事件。当单元进入编辑模式时,将引发此事件。由于OLV并不真正具有内置编辑器,因此您必须自己创建。然后处理CellEditFinishing事件以在将数据放回模型之前验证数据。
首先,处理CellEditStarting事件:
private void objlv_CellEditStarting(object sender, CellEditEventArgs e)
{
//e.Column.AspectName gives the model column name of the editing column
if (e.Column.AspectName == "DoubleValue")
{
NumericUpDown nud = new NumericUpDown();
nud.MinValue = 0.0;
nud.MaxValue = 1000.0;
nud.Value = (double)e.Value;
e.Control = nud;
}
}
这会创建您的编辑控件。如果要确保大小合适,可以使用事件对象中的e.CellBounds将控件的大小(在本例中为NumericUpDown)设置为单元格边界。
当您单击单元格时,将显示编辑器。然后,您可以处理编辑完成的事件以验证数据:
private void objlv_CellEditFinishing(object sender, CellEditEventArgs e)
{
if (e.Column.AspectName == "DoubleValue")
{
//Here you can verify data, if the data is wrong, call
if ((double)e.NewValue > 10000.0)
e.Cancel = true;
}
}
我不认为处理它是必需的,但它是验证用户数据的良好做法。
CellEditStarting事件中的编辑控件可以是任何控件,甚至是用户定义的控件。我在单元格编辑器中使用了很多用户定义的控件(比如带有浏览按钮的文本框)。
[编辑]
我在这里上传了一个似乎有效的dropbox link示例。根据需要可能不在确切的视图中,但似乎可以完成这项工作。
答案 1 :(得分:0)
对于任何其他有此问题的人。尝试在十进制中编辑“空”值时,我有它吗?在选项卡页面的OLV上。我的解决方案是将UseCustomSelectionColors设置为“ False”。我没有去其他地方看看它是否被报告为错误。好像是个错误。