Tag: datagridviewrow

使DataGridViewRow不可见的更快方法

我正在使用以下代码将一堆DataGridViewRow元素设置为不可见。 我使用的规则是检查关联数据源的布尔标志。 如果该标志为true,则将显示该行。 如果没有,它将是隐形的。 以下代码有效; 然而,它是通过消耗相当多的时间来实现的: CurrencyManager currencyManager = (CurrencyManager)BindingContext[dataGridView.DataSource]; currencyManager.SuspendBinding(); foreach (DataGridViewRow row in dataGridView.Rows) { if (!objectList.list[row.Index].Selected) { row.Visible = false; } } currencyManager.ResumeBinding(); 有没有人有更好的解决方案? 我必须经历的对象列表越长,这个过程自然就越长。 我无法设置一系列单元格,因为布尔值可能不是连续的。

使用自定义对象的动态列表,无法动态更改dataGrid的单元格属性

我是新来发布在Stack上的。 我已经搜索了一段与我类似的问题。 我试图动态地根据对象的布尔值将WinForms DataGridView中的复选框从非只读更改为只读。 它在调试模式下显示已发生更改,但一旦完全运行,应该只读取的复选框单元仍然允许检查和取消选中function。 我已经离开了已注释的部分,以表明我已尝试这样做。 m_SingletonForm.dataGridView1.DataSource = list; m_SingletonForm.dataGridView1.AutoSizeColumnsMode = DataGridViewAutoSizeColumnsMode.DisplayedCells; m_SingletonForm.dataGridView1.Columns[“StoreGroup”].ReadOnly = true; m_SingletonForm.dataGridView1.Columns[“Message”].AutoSizeMode = DataGridViewAutoSizeColumnMode.Fill; m_SingletonForm.dataGridView1[0, 0].ReadOnly = true; foreach (DataGridViewRow row in m_SingletonForm.dataGridView1.Rows) { //var isChecked = Convert.ToBoolean(row.Cells[“SendFile”].Value); //if (!isChecked) //{ //m_SingletonForm.dataGridView1.Rows[0].Cells[“SendFile”].Style.BackColor = Color.Red; //m_SingletonForm.dataGridView1.Rows[0].Cells[“SendFile”].ReadOnly = true; //m_SingletonForm.dataGridView1.Rows[row.Index].Cells[“SendFile”].Style.BackColor = Color.Red; //m_SingletonForm.dataGridView1.Rows[row.Index].Cells[“SendFile”].ReadOnly = true; //m_SingletonForm.dataGridView1[“SendFile”, row.Index].ReadOnly = true; //m_SingletonForm.dataGridView1[“SendFile”, row.Index].Style.BackColor = Color.Red; […]

如何按列名设置DataGridViewRow的Cell值?

在Windows窗体中,我试图通过插入DataGridViewRows手动填充DataGridView ,所以我的代码如下所示: DataGridViewRow row = new DataGridViewRow(); row.CreateCells(dgvArticles); row.Cells[0].Value = product.Id; row.Cells[1].Value = product.Description; . . . dgvArticles.Rows.Add(row); 但是,我想按列名添加Cell值,而不是通过索引来添加它,如下所示: row.Cells[“code”].Value = product.Id; row.Cells[“description”].Value = product.Description; 但这样做会抛出一个错误,说它无法找到名为“code”的列。 我正在设计设计器中的DataGridView列,如下所示: 难道我做错了什么? 我怎样才能完成我想做的事情?

DataGridView在更新和重新加载后保留选定的索引和滚动位置

我有一些问题,现在不要如何保持DataGridView的滚动位置。 我有超过1000行,滚动回编辑行是痛苦的。 如何在刷新数据后保留滚动位置并滚动到已编辑的行?

C#DataGridView:将多行合并为一行但保留原件

首先:一旦我完成,我将自己提供这个问题的答案。 但是你可以在我的路上帮助我,我会感谢你的所有建议。 我有一个DataGridView与不同的行属于一起。 我的问题是找到一种合适的方式来显示和使用这些连接的行。 我的第一个想法是保持每一行的个性,但这有一些缺点: 如何清楚地显示行属于一起? 我可以添加另一列,其单元格显示连接行的相同数字,但这不容易看到,需要另一列。 我的解决方案是所有连接的行具有相同的背景颜色,并且对于每组连接的行,颜色在白色和浅灰色之间变化。 如何使用连接的行? 一旦我选择了一行的一行,我就必须通过提取哪些行属于一起的信息(保存在单元格的标签或隐藏的单元格中)来分析这一行,并选择它们。 在DataGridView中向上/向下移动行的工作量更大:我还需要分析相邻的行集以查看我必须移动多远。 因此我决定创建一个DataGridViewMultiRow 。 完成后,我将在这里发布该类的完整代码作为答案。 它将inheritanceDataGridViewRow (“DGVR”)并存储单个DGVR或其他多行的列表,并通过自己的代码绘制行的单元格将它们显示为一个。 但是,我仍然需要找出用于此目的的事件。 MSDN建议使用DataGridView.RowPrePaint ,但我更想使用绑定到DGVR本身的事件。 也许我会分析DataGridViewRow.Paint()的源代码并编写我自己的方法…… 当添加到多行时,单行将变为不可见(它们可以通过滥用概念再次切换到可见,但.net本身有很多不受滥用的保护;也许我甚至不切换看不见,所以这是用户的责任)。 通过强制每个DGVR成为与多行相同的DGV的一部分,可以简单地避免多行中的递归,并且因为每行只能添加到一个DGV并且只能添加一次,所以我不必检查递归了。 现在我正在努力如何实现内部行列表。 我正在考虑使用.net DataGridViewRowCollection ,但我发现它的操作与DataGridView本身紧密绑定:DGV只能有一个DGVRColl,但每个DGVRColl都引用一个DGV。 因此,我的每个DGVMultiRow中都会有半连接的DGVRColl。 我要问这是否会引起问题,但我已经发现在实例化DGVRColl时我必须提供一个DGV,这是DGVMultiRow ctor被调用的那一刻我没有的。 此外,当使用DGVRColl并为其提供公共get属性时,我只能挂钩’CollectionChanged’事件并且无法控制各个操作,如Add()和Remove() 。 所以我将使用一个简单的私人列表。 继续#1 我完成了主要工作,看起来已经很不错了: 我仍然需要修复细节,比如在移动滚动条和其他小东西时正确放置文本。 我决定不覆盖DataGridViewRow.Paint()因为那个内部连接太多了。 所以我第一次使用CellPainting事件,这是一个良好的开端。 但是我需要同时拥有该行的所有单元格的信息,所以我按照MSDN的建议继续覆盖DataGridView.RowPrePaint() ,请参阅上面的链接。 这非常有效。 未完待续。