Ich habe meine Hauptaufgabe Person
mit einer Sammlung von Adrresses
Wertobjekt wie folgt aus:Bearbeiten ein Objekt, das wie kein Schlüssel (Objektwert) in Gridview (ASP.NET)
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 meiner Asp-Seite Ich habe a Gridview
, wo Benutzer Adressen hinzufügen, entfernen oder ändern können.
Frage ist: Wie kann ich die korrekte Adresse von einer Benutzerauswahl im Raster erhalten? Muss ich alle Felder aus dem Raster lesen und sie verwenden, um die Adresse zu erstellen, die ich durchsuchen muss?
I verwenden CommandArgument
Container.DataItemIndex passieren so ican't es verwenden gesamte Objekt-Code senden
EDIT: dies ein Extrakt des Gitters ist:
<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>
und dies 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
}
Sie können die Informationen finden, die Sie in diesem Beitrag nicht benötigen: http://stackoverflow.com/questions/36827111/asp-net-gridview-how-to-edit-and-delete-data -records/36828018 # 36828018. – ConnorsFan
verwendet es DataKeyNames, während iam nach einer Möglichkeit sucht, Container.DataItem zu übergeben. Ich habe auch Problem in RowUpdating, da OldValues und newValues leer sind, da ich keine ObjectDataSource habe (und ich gridview nur lade, wenn nicht postback –
Ich müsste den Code sehen, wo Sie die Daten an die GridView binden, um zu verstehen, wie es funktioniert vielleicht das Markup der GridView auch – ConnorsFan