我将List绑定到DataGridView.SomeObject类的一个属性是状态代码(例如Red,Yellow,Green).我可以轻松地将状态"绑定"到单元格的背景颜色吗?如何绑定到工具提示呢?
我需要使用自然排序(在资源管理器中)对DataGridView进行排序,以便数字和文本(在同一列中)自然排序,而不是按字母顺序排序(以便"位置3"位于"位置20"之前,等等).我有一个DataGridView,我将DataView设置为DataSource.DataView包含一个DataTable,它是使用数据库中的某些值创建的.列类型是字符串.我有一个IComparer,它做了应有的事情,但我无法弄清楚如何使用它,因为我无法找到如何进行排序.DataGridView.SortCompare事件是完美的,因为它是数据绑定的,所以不起作用.DataView.Sort只接受具有列名和排序顺序的字符串.
很烦人.试图在StackOverflow上阅读相关问题,并搜索谷歌的很多和很多,但我真的找不到这个.只有我真正找到的东西是使用dataview的Sort(字符串)方法,因为它按字母顺序排序.
有没有人知道如何做到这一点没有太多麻烦?它应该是别人而不是我这个?我真的不想重新实现整个datagridview或dataview类,只是为了获得自定义排序...
更新:如果有人想知道,我仍然在寻找这个问题的好答案.虽然与此同时,我最终创建了自己的简单表类,然后手动将其提供给datagridview.覆盖SortCompare方法.有点烦人,但并不太难,因为我只需要显示值(没有编辑或任何东西),因此可以将所有内容转换为字符串.
我有一个类的BindingList <>设置为BindingSource的DataSource属性,该属性又设置为DataGridView的DataSource属性.
1.我的理解是,对列表的任何添加都将触发ListChanged事件,该事件将通过BindingSource传播,然后传播到DataGridView,DataGridView将更新自身以显示更改.这将发生,因为事件已自动连接.(是?)
当所有工作都在UI线程上完成时,这一切都很好,但是当从非UI线程创建和更改列表时,最终在更新网格时会发生跨线程异常.我能理解为什么会这样,但是没有办法解决这个问题......
2.我很难理解,我应该在哪里最好拦截ListChanged事件来尝试将内容整理到UI线程中?我猜我需要一个UI线程的引用以某种方式帮助做到这一点?
我已经阅读了很多这方面的帖子/文章,但我很难挣扎,因为我不完全理解这里的工作机制.
我们永远不会在列表中更改任何项目,只添加它们,并最初清除列表.
(我使用的是.NET 2.0)
我已将datagridview绑定到数据表.但是gridview在底部显示了一个额外的空行?我该怎么隐藏它?提前致谢
当我在单元格内编辑文本时,DataGridView keydown事件不起作用.
我正在分配快捷键Alt + S来保存数据,它在单元格不处于编辑模式时有效,但如果它处于编辑模式,则代码不能正常工作
private void dataGridView1_KeyDown(object sender, KeyEventArgs e)
{
if (e.KeyData == (Keys.Alt | Keys.S))
{
//save data
}
}
Run Code Online (Sandbox Code Playgroud) 如何让DataGridView中的某些单元格无法选择?
"不可选择"是指:不能以任何方式选择它并试图选择它不会取消选择任何其他单元格.
我不是故意的ReadOnly.我的单元格已经将此属性设置为true.
DataGridView.MultiSelect 需要是假的.
感谢JYL的回答,我写了一个代码:
private int selectedCellRow = 0;
private int selectedCellColumn = 0;
private void grid_CellStateChanged(object sender, DataGridViewCellStateChangedEventArgs e)
{
if (e.Cell == null || e.StateChanged != DataGridViewElementStates.Selected)
return;
if (e.Cell.RowIndex == 0 || e.Cell.ColumnIndex == 0 || e.Cell.RowIndex == 1 && e.Cell.ColumnIndex == 1)
{
e.Cell.Selected = false;
grid.Rows[selectedCellRow].Cells[selectedCellColumn].Selected = true;
}
else
{
selectedCellRow = e.Cell.RowIndex;
selectedCellColumn = e.Cell.ColumnIndex;
}
//this was only for seeing what is happening
//this.Text = selectedCellRow + " …Run Code Online (Sandbox Code Playgroud) 我有一个DataGridView与a相关联的BindingSource.
我BindingSource链接到一个IQueryable实体列表:
public void BindTo(IQueryable elements)
{
BindingSource source = new BindingSource();
source.DataSource = elements;
bindingNavigator1.BindingSource = source;
dataGridView1.DataSource = source;
}
Run Code Online (Sandbox Code Playgroud)
我希望我的用户能够单击网格标题来对数据进行排序 - 努力使其工作.可能吗?如果是这样,我该怎么办?
我想知道是否可以将值添加到特定的DataTable单元格?
假设我有一个现有的dataTable,并且我添加了一个新列,如何在不覆盖现有列的行的情况下添加到新列的行?
据我所知,没有一种方法可以添加到特定的细胞(除非我错了).
dt.Rows.Add(a, b, c, d)
Run Code Online (Sandbox Code Playgroud)
其中a,b,c和d是字符串值.那么如果我只想添加到d列呢?
任何帮助,将不胜感激.
我有一个绑定到DataGridView的DataTable.我在DGV中启用了FullRowSelect.有没有办法将所选行作为DataRow获取,以便我可以获得对所选行的值的强类型访问?
(抱歉英文不好)
我重新涂漆时的性能存在很大问题DataGridView.
我正在使用a DataGridView来显示来自外部应用程序流的日志.来自流的消息以高频率(小于1毫秒)进入.如果我DataGridView在每条新消息到来时立即添加新行,DataGridView则在下一条消息到来之前没有时间重新绘制自己.
一种可能的解决方案是使用队列来收集消息,并使用队列中的消息DataGridView每100毫秒重新绘制一次.这很好但是DataGridView当它自动滚动到最后一行时闪烁.(禁用平滑滚动)
你能帮助我改善DataGridView表现吗?