I have my main object Person
with a collection of Adrresses
value object like this:
public class Person
{
public virtual int Id {get; set;}
public virtual string Name {get; set;}
private IList<Adrress > _adrresses= new List<Adrress>();
public virtual IEnumerable Adrress Adrresses {...}
public virtual void AddAddress(Address a){...}
public virtual void RemoveAddress(Address a){...}
public virtual void ChangeAddress(OldAddress oa, OldAddress oa)
{
int index = _adrresses.IndexOf(oa);
if (index != -1)
_adrresses[index] = oa;
}
}
public class Adrress
{
public virtual string Street {get; set;}
public virtual string Number {get; set;}
public virtual string City {get; set;}
... other 7 fields
}
In my asp page I have a Gridview
where user can add, remove or change addresses.
Question is: How can I get the correct address from one user selection in grid? Do I have to read every fields from grid and use them to construct the address that I have to search?
I use CommandArgument
to pass Container.DataItemIndex so ican't use it to send entire object to code
EDIT: this is an extract of the grid:
<asp:GridView ID="gvElencoFaseAttivita" runat="server"
AllowPaging="false" AutoGenerateColumns="False"
Width="100%" CssClass="datiGridView tabletwo" ShowHeader="False"
OnRowCommand="gvElencoFaseAttivita_RowCommand"
OnRowUpdating="gvElencoFaseAttivita_RowUpdating"
OnRowDeleted="gvElencoFaseAttivita_RowDeleted"
OnRowEditing="gvElencoFaseAttivita_RowEditing"
OnRowCancelingEdit="gvElencoFaseAttivita_RowCancelingEdit">
<Columns>
<asp:TemplateField HeaderText="Sel">
<ItemTemplate>
<asp:LinkButton ID="lbtnEditFaseAttivita" runat="server" CausesValidation="False" CommandName="Edit" CommandArgument='<%# Container.DataItemIndex %>' ToolTip="Modifica la fase" CssClass="imgModificaPiccola" />
</ItemTemplate>
<EditItemTemplate>
<asp:LinkButton ID="lbtnAggiornaFaseAttivita" runat="server" ValidationGroup="UpdateFaseAttivitaGrid" CommandName="Update" CssClass="imgSalvaPiccola" ToolTip="Salva le modifiche" CommandArgument='<%# Container.DataItemIndex %>' />
</EditItemTemplate>
<ItemStyle CssClass="gestioneFaseAttivitaTd2" />
</asp:TemplateField>
<asp:TemplateField HeaderText="Street" SortExpression="Street">
<ItemTemplate>
<asp:Label ID="lblStreet" runat="server" Text='<%# ((Adrress)Container.DataItem).Street %>'></asp:Label>
</ItemTemplate>
<EditItemTemplate>
<asp:TextBox ID="txtEditStreet" runat="server" Text='<%# ((Adrress)Container.DataItem).Street %>'></asp:TextBox>
</EditItemTemplate>
<ItemStyle CssClass="gestioneFaseAttivitaTd3" />
</asp:TemplateField>
</Columns>
<SelectedRowStyle CssClass="selezioneGridView" />
<AlternatingRowStyle CssClass="odd" />
</asp:GridView>
and this the dataBind
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
loadGridAddress();
}
protected void loadGridAddress()
{
using (iuow = kernel.Get<IUnitOfWork>())
{
gvElencoFaseAttivita.DataSource = person.Addresses;
gvElencoFaseAttivita.DataBind();
}
}
protected void gvElencoFaseAttivita_RowUpdating(object sender, GridViewUpdateEventArgs e)
{
var a = e.OldValues[""]; //e.OldValues here is empty
}