1
I’m having difficulty feeding a dataGridView with objects, where I need to list properties of another object. as for example:
PRODUCT.CODE, PRODUCT.DESCRIPTION, REQUEST.VALUESARY.
The only solution I could find for such treatment would be the one available in this
http://www.macoratti.net/16/10/c_dgvobj1.htm I don’t know if that would be the ideal way,
because, I assign all my objects to an object list, and I apply in the datasource of dataGridView . where the presentation is certain, But, man PROBLEM starts when I am going to remove an object from the dataGridView , through the function, Remove, from a list.
Lista.Remove(dtGridMaterial.SelectedRows[0].DataBoundItem as Objeto)
Object is removed correctly from dataGridView, but after removal, the event below is triggered:
private void dtGridMaterial_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if ((dtGridMaterial.Rows[e.RowIndex].DataBoundItem != null) && (dtGridMaterial.Columns[e.ColumnIndex].DataPropertyName.Contains(".")))
{
e.Value = BindProperty(dtGridMaterial.Rows[e.RowIndex].DataBoundItem, dtGridMaterial.Columns[e.ColumnIndex].DataPropertyName);
}
}
Where the validation is made if the field that I set in the Datapropertyname property of Datagridview has the point ("."). So I can identify the properties of the other classes, as explained in the link above.
Result, final is the following exception:
I understand that the information I am trying to validate in the event has already been removed by the remove function. however I do not know how to treat the problem. I need help, I thank you.
** COMPLEMENT, Functions used
Remove from Grid
{
ObraNegocio obraNegocio = new ObraNegocio(gObra);
obraNegocio.RemoverMaterialObra(dtGridMaterial.SelectedRows[0].DataBoundItem as MaterialObra);
gObra.RemoverMaterial(dtGridMaterial.SelectedRows[0].DataBoundItem as MaterialObra);
}
Remove from List
public void RemoverMaterial(MaterialObra materialObra)
{
ListamaterialObras.Remove(materialObra);
}
Fill in Grid data
public void PreencherGridMaterial()
{
try
{
dtGridMaterial.DataSource = null;
dtGridMaterial.DataSource = gObra.ListamaterialObras;
}
catch (Exception ex)
{
MessageBox.Show("erro " + ex.Message);
}
}
Cellformating event, as I said, to present data from other classes linked to the grid.
private void dtGridMaterial_CellFormatting(object sender, DataGridViewCellFormattingEventArgs e)
{
if ((dtGridMaterial.Rows[e.RowIndex].DataBoundItem != null) && (dtGridMaterial.Columns[e.ColumnIndex].DataPropertyName.Contains(".")))
{
e.Value = BindProperty(dtGridMaterial.Rows[e.RowIndex].DataBoundItem, dtGridMaterial.Columns[e.ColumnIndex].DataPropertyName);
}
}
only with this piece of code can’t guess...
Lista
is theDataSource
of your grid view? where is the rest of the remove method? submit a [mcve]– Leandro Angelo
Exactly what I went through, I assign objects from an object list, and the grid datasource receives this list. , in the remove function, remove a specific object from the list, and assign it again to the datasource, for update
C#
 public void RemoverMaterial(MaterialObra materialObra)
 {
 ListamaterialObras.Remove(materialObra);
 }

 List<MaterialObra> listaMaterialObra;

– Paulo Júnior
But this is not included in the question... add the snippet where you assign the datasource and update it after removal.
– Leandro Angelo
I edited the publication, posting all the functions used
– Paulo Júnior