我有一个DataGridView
,我设置DataSource
:
taskerEntities te = new taskerEntities();
var OMsMasterDescriptiveIndicators = te.MyTable.Select(x => new lccls {Id = x.Id, name = x.name }).ToList();
MyGrid.DataSource = OMsMasterDescriptiveIndicators;
将class lccls
作为
public class lccls
{
public string Id { get; set; }
public Nullable<decimal> name { get; set; }
}
在某个特定事件中,我想让当前行不可见:
MyGrid.Rows[5].Visible = false;
但我无法做到这一点。而是抛出异常,并显示以下错误消息:
无法与货币经理的头寸相关联的行 隐形
我怀疑原因与设置DataSource
有关,但为什么?
答案 0 :(得分:42)
经过大量搜索后,我得到了solution
CurrencyManager currencyManager1 = (CurrencyManager)BindingContext[MyGrid.DataSource];
currencyManager1.SuspendBinding();
MyGrid.Rows[5].Visible = false;
currencyManager1.ResumeBinding();
答案 1 :(得分:9)
当前行索引时,无法将yourDataGridView行的visible属性设置为false 如果试图隐藏当前单元格会遇到这样的错误
soulution:
当yourDataGridView数据源不为空时:
CurrencyManager currencyManager1 = (CurrencyManager)BindingContext[yourDataGridView.DataSource];
currencyManager1.SuspendBinding();
yourDataGridView.Rows[Target Index].Visible = false;
currencyManager1.ResumeBinding();
当yourDataGridView数据源为null时:
yourDataGridView.CurrentCell = null;
yourDataGridView.Rows[Target Index].Visible = false;
答案 2 :(得分:1)
我有一个U的例子。我有一个datagridview可能是多选行。当我单击按钮以显示选中的假行时。试试这个:
foreach (DataGridViewRow row in dataGridView1.SelectedRows)
{
CurrencyManager currencyManager1 =(CurrencyManager)BindingContext[dataGridView1.DataSource];
currencyManager1.SuspendBinding();
dataGridView1.CurrentCell = null;
row.Visible = false;
}
dataGridView1.Refresh();
请记住设置属性SelectionMode:FullRowSelect
答案 3 :(得分:1)
示例
foreach (DataGridViewRow rw in dataGridView1.Rows)
{
if (rw.Cells[14].Value.ToString() == "") // this Cell have a TEXT,
{
CurrencyManager currencyManager1 = (CurrencyManager)BindingContext[dataGridView1.DataSource];
currencyManager1.SuspendBinding();
rw.Visible = false;
currencyManager1.ResumeBinding();
}
}
此仅显示单元格索引为14的行,如果为空白或为空,则整个行均不显示
答案 4 :(得分:0)
回答这个主题可能有点晚了,但是我建议您使用DataTable.DefaultView.RowFilter 属性以过滤您需要在有界DataGridView上显示的内容。请检查以下链接以获取更多信息: https://docs.microsoft.com/en-us/dotnet/api/system.data.dataview.rowfilter?redirectedfrom=MSDN&view=netframework-4.8#System_Data_DataView_RowFilter
致谢。
答案 5 :(得分:0)
我知道这是一个古老的话题,但是是一个替代解决方案(我的代码是vb.net,但我认为它会翻译)
root
答案 6 :(得分:0)
我试图在 CellFormating 事件中隐藏一行,但没有成功。看起来货币管理器不能为引发事件的行暂停,而不是我之前处理该行(第 0 行处理最后一行)
Private Sub DgView1_CellFormatting(sender As Object, e As DataGridViewCellFormattingEventArgs) Handles DgView1.CellFormatting
If DgView1.Rows(e.RowIndex).Cells(e.ColumnIndex).OwningColumn.Name = CoID Then
Dim k = If(e.RowIndex = 0, DgView1.RowCount - 1, e.RowIndex - 1)
DgView1.Rows(k).Visible = Countries.Rows(k)("Ro")
End If
End Sub