有人可以描述两者之间的区别对于我的项目.
目前我有一个List<MyClass>并将BindingSource设置为它,并将DataGridView设置为BindingSource.
我已经实现了IEditableObject,当调用CancelEdit时,我将我的对象恢复到它的状态Memberwise.Clone()
将我的List更改为BindingList会解决这个问题,使用BindingList有什么好处?
我上课了
class Person{
public string Name {get; set;}
public string Surname {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
和List<Person>我添加一些项目.这个清单绑定了我的DataGridView.
List<Person> persons = new List<Person>();
persons.Add(new Person(){Name="Joe", Surname="Black"});
persons.Add(new Person(){Name="Misha", Surname="Kozlov"});
myGrid.DataSource = persons;
Run Code Online (Sandbox Code Playgroud)
没有问题.myGrid显示两行,但是当我向persons列表中添加新项目时,myGrid不会显示新的更新列表.它只显示我之前添加的两行.
那么问题是什么?
每次重新绑定都很有效.但是当我DataTable每次进行一些更改时都绑定到网格时,DataTable没有任何ReBind需要myGrid.
如何在不重新绑定的情况下解决它?
我的双显示器系统上的DataGridView遇到了一个非常奇怪的问题.该问题表现为对控件的极快重复(如完全重绘的30秒),但只有在我的某个屏幕上时才会显示.在另一方面,重绘速度很好.
我有一个Nvidia 8800 GT,带有最新的非beta驱动程序(175件).这是驱动程序错误吗?我会把它留在空中,因为我必须忍受这种特殊的配置.(它不会发生在ATI卡上,但......)
绘画速度与单元格内容无关,自定义绘图根本不会改善性能 - 即使只绘制实心矩形也是如此.
我后来发现在表单上放置一个ElementHost(来自System.Windows.Forms.Integration命名空间)可以解决问题.它不必被搞砸; 它只需要是DataGridView所在的表单的子级.只要Visible属性为true ,就可以将其大小调整为(0,0).
我不想明确地将.NET 3/3.5依赖项添加到我的应用程序中; 我创建了一个方法来在运行时创建此控件(如果可以)使用反射.它工作正常,至少它在没有所需库的机器上优雅地失败 - 它只是变得缓慢.
这个方法还允许我在应用程序运行时应用修复,这样可以更容易地看到WPF库在我的表单上发生了什么变化(使用Spy ++).
经过大量的试验和错误,我注意到在控件本身上启用双缓冲(而不仅仅是表单)可以解决问题!
因此,您只需要根据DataGridView创建一个自定义类,以便启用其DoubleBuffering.而已!
class CustomDataGridView: DataGridView
{
public CustomDataGridView()
{
DoubleBuffered = true;
}
}
Run Code Online (Sandbox Code Playgroud)
只要我的所有网格实例都使用这个自定义版本,一切都很好.如果我遇到由此引起的情况,我无法使用子类解决方案(如果我没有代码),我想我可以尝试将该控件注入表单:)(虽然我'将更有可能尝试使用反射来强制从外部启用DoubleBuffered属性再次避免依赖).
令人遗憾的是,这么简单的事情花了我很多时间......
我有一个简单的List<string>,我希望它显示在一个DataGridView列中.
如果列表包含更复杂的对象,则只需将列表建立为其DataSource属性的值.
但是当这样做时:
myDataGridView.DataSource = myStringList;
Run Code Online (Sandbox Code Playgroud)
我得到一个名为的列,Length并显示字符串的长度.
如何在列中显示列表中的实际字符串值?
我有一个winforms应用程序,并希望在DataGridView选中/取消选中控件中嵌入的复选框时触发一些代码.我尝试过的每一件事
CheckBox单击时但在其检查状态发生变化之前触发,或者CheckBox失去焦点时触发我似乎无法找到在检查状态更改后立即触发的事件.
编辑:
我想实现的是,当检查的状态CheckBox的一个DataGridView变化,在其他两个数据DataGridView变迁.然而,我使用的所有事件中,其他网格中的数据仅CheckBox在第一次DataGridView失去焦点后才会发生变化.
我的3列DataGridView.我想要做的是让前2列自动适应内容的宽度,并让第3列填充剩余的空间.
在WinForms中可以做到吗?我正在从EF DataContext加载我的数据,如果它有用的话.我已经包含了目前看起来如何的图像.

我需要强制DataGridView显示所选row.
简而言之,我有一个根据键入的内容textbox更改DGV选择textbox.发生这种情况时,选择会更改为匹配row.
不幸的是,如果所选row内容不在视图中,我必须手动向下滚动才能找到所选内容.有谁知道如何强制DGV显示所选row?
谢谢!
我的表单上有一个datagridview,我填充它:
dataGridView1.DataSource = students.Select(s => new { ID = s.StudentId, RUDE = s.RUDE, Nombre = s.Name, Apellidos = s.LastNameFather + " " + s.LastNameMother, Nacido = s.DateOfBirth })
.OrderBy(s => s.Apellidos)
.ToList();
Run Code Online (Sandbox Code Playgroud)
现在,我使用s.Apellidos作为默认排序,但我也想允许用户在单击列标题时进行排序.
这种排序不会以任何方式修改数据,它只是一个客户端奖励,以便在用眼睛扫描屏幕时更容易搜索信息.
谢谢你的建议.
我的DataGridView中有几列,并且我的行中有数据.我在这里看到了一些解决方案,但我无法将它们结合起来!
只需右键单击一行,它就会选择整行,并显示一个菜单,其中包含删除行的选项,当选择该选项时,它将删除该行.
我做了一些尝试,但没有一个工作,它看起来很乱.我该怎么办?
如何在DataGridView列中右对齐文本?我正在编写.NET WinForms应用程序.
datagridview ×10
c# ×8
winforms ×7
.net ×3
binding ×2
contextmenu ×1
data-binding ×1
grid ×1
list ×1
nvidia ×1
performance ×1
right-click ×1
scroll ×1
select ×1
selected ×1
sorting ×1