Reputation: 5136
I have a DataGridView
where I set DataSource
:
taskerEntities te = new taskerEntities();
var OMsMasterDescriptiveIndicators = te.MyTable.Select(x => new lccls {Id = x.Id, name = x.name }).ToList();
MyGrid.DataSource = OMsMasterDescriptiveIndicators;
with my class lccls
as
public class lccls
{
public string Id { get; set; }
public Nullable<decimal> name { get; set; }
}
At a certain event I want to make the current row invisible:
MyGrid.Rows[5].Visible = false;
But I am unable to do this. Instead an exception is thrown with the following error message:
Row associated with the currency manager's position cannot be made invisible
I suspect the reason is related to setting DataSource
, but why?
Upvotes: 34
Views: 46112
Reputation: 1
maybe this is old but:
Here an easy Way:
var item = dgv.Rows.Cast<DataGridViewRow>().FirstOrDefault(c => c.Cells[x].Value?.ToString() == X);
if (item != null)
{
availableIpsDataGridView.CurrentCell = null;
item.Visible = false;
}
and visibling it with:
var item = dgv.Rows.Cast<DataGridViewRow>().FirstOrDefault(c => c.Cells[x].Value?.ToString() == X);
if (item != null)
{
item.Visible = true;
}
Upvotes: 0
Reputation: 1
I tried to hide a row in a CellFormating event and it didn't worked. It looks like the currency maneger cann't be suspended for the row that raised the event than I deal with the row before (row 0 deals with the last row)
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
Upvotes: 0
Reputation: 175
I know this is an old topic, but an alternative solution (my code is vb.net, but I assume it would translate)
If WO_DGV.CurrentCell.RowIndex = i Then
'you cannot make invisible the row that is 'current'
WO_DGV.CurrentCell = WO_DGV.Rows(i - 1).Cells("act")
'to get to this code I know that there is a row before i, which is why I can use i-1 as new focus
End If
WO_DGV.Rows(i).Visible = False
Upvotes: 0
Reputation: 31
Maybe a little late to answer this topic but I suggest you to use DataTable.DefaultView.RowFilter property to filter what you need to show on the bounded DataGridView. Please check the following link for more informtion: https://learn.microsoft.com/en-us/dotnet/api/system.data.dataview.rowfilter?redirectedfrom=MSDN&view=netframework-4.8#System_Data_DataView_RowFilter
regards.
Upvotes: 0
Reputation: 21
Example
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();
}
}
this show only the row that have in the cell index 14, if this is blank or empty the whole row not show
Upvotes: 2
Reputation: 5136
After searching a lot, I got the solution
CurrencyManager currencyManager1 = (CurrencyManager)BindingContext[MyGrid.DataSource];
currencyManager1.SuspendBinding();
MyGrid.Rows[5].Visible = false;
currencyManager1.ResumeBinding();
Upvotes: 74
Reputation: 910
Cannot set yourDataGridView row visible property to false when current row index Will encounter such error if trying to hide current cell
soulution :
when yourDataGridView Data source is not null :
CurrencyManager currencyManager1 = (CurrencyManager)BindingContext[yourDataGridView.DataSource];
currencyManager1.SuspendBinding();
yourDataGridView.Rows[Target Index].Visible = false;
currencyManager1.ResumeBinding();
when yourDataGridView Data source is null :
yourDataGridView.CurrentCell = null;
yourDataGridView.Rows[Target Index].Visible = false;
Upvotes: 19
Reputation: 21
I have an example for U. I have a datagridview that may multiselected row. When i click the button to visible false row that selected. Try this:
foreach (DataGridViewRow row in dataGridView1.SelectedRows)
{
CurrencyManager currencyManager1 =(CurrencyManager)BindingContext[dataGridView1.DataSource];
currencyManager1.SuspendBinding();
dataGridView1.CurrentCell = null;
row.Visible = false;
}
dataGridView1.Refresh();
Remember to set property SelectionMode: FullRowSelect
Upvotes: 2