Zugriff auf die Daten oder dataItem verwendet, um ein gridview zu binden
Ich habe ein gridview, für die ich programmgesteuert festlegen der datasource und databind es eine Sammlung von Objekten. Für jede Zeile, die erstellt wird, dann verwende ich verschiedene Methoden, die in den Bereichen zum extrahieren der relevanten Informationen aus dem Objekt wie dieses:
<asp:TemplateField HeaderText="Aliases">
<ItemTemplate>
<%# ( (MyItem)Container.DataItem).Aliases.ToString() %>
</ItemTemplate>
</asp:TemplateField>
Mein problem ist, dass in der OnRowDeleting Methode würde ich am Liebsten zugreifen, dass DataItem-mit e g MyGridView.Zeilen[e.RowIndex].DataItem oder in einer anderen Weise. Aber ich kann nicht herausfinden, wie konfigurieren Sie die Gridview zu binden DataItem. Ist dies möglich, Zugriff auf das DataItem verwendet, und wie sollte ich es konfigurieren, um es zu tun? Wenn das nicht möglich ist kann ich auf die Werte, die binden von den Methoden? Oder muss ich mit plan B und schreiben Sie die datasource-Objekt-Auflistung, um ein datatable und verwenden Sie dann datakeysnames?
- Warum kann man nicht den Zugriff auf var dataItem = MyGridView.Zeilen[e.RowIndex].DataItem; dass es funktionieren wird.
- Ich habe versucht zu benutzen, aber ich bekomme null.
- was ist der MyItem-Sammlung? Typ und Felder?
- was ist mit var row = MyGridView.Zeilen[e.RowIndex]; Dann sollten Sie über eine Liste von Zellen. Und Sie können mit extrahieren die Zellen aus der Zeile.
- Es ist null zu. Vielleicht ist das ein postback-problem?
Du musst angemeldet sein, um einen Kommentar abzugeben.
MyGridView.Rows[e.RowIndex].DataItem
sollte in der Regel Arbeit, aber ich denke, dass Sie wahrscheinlich verlassen der view-state für die Beibehaltung der raster-Daten auf post-Rücken. In einem solchen Fall, erhalten Sie dieDataItem
- Eigenschaft als NULL.Work-around können Sie immer neu zu binden, das Netz mit den eigentlichen Daten, die in jedem postback früh in page life cycle (sagen
page_load
).Jedoch in Ihrem Fall, können Sie sehr gut verwenden
DataKeyNames
. Im Gegensatz zu eurem glauben, brauchen Sie nicht eine DataTable für diese Eigenschaft zu arbeiten. Zum Beispiel, wenn Ihre Klasse hat die Eigenschaft mit dem NamenItemId
angibt, den Schlüssel für Ihr Objekt können Sie dannDataKeyNames="ItemId"
im markup und beziehen es inOnRowDeleting
mit Schlüssel - Eigenschaft der event-Argumente.serializable
. Aber die meisten oft, Ihre wichtigsten Eigenschaften Kombination aus int, string, guid und die sind schon als serialisierbar markiert.DataKeyNames="ItemId"
im gridview-Niveau, dannKeys
Eigenschaft vonGridViewDeleteEventArgs
haben Wert dieser Eigenschaft für das Objekt gebunden, um die Zeile gelöscht werden.Laut MSDN:
"Der DataItem-Eigenschaft ist nur verfügbar, während und nach dem RowDataBound-Ereignis des GridView-Steuerelements."
Daher Zugriff auf das DataItem in der RowDataBound-Ereignis:
Können sagen, Sie binden eine Liste(Des Fahrzeugs), um das raster:
In der RowDataBound event Zugriff auf das DataItem: