Sie erhalten Artikel von GridViewRow ASP.NET

Ich habe ein GridView das ich eine DataSource Binden, um es von einer SQL-Datenbank, der grid eine Spalte mit einem Kontrollkästchen, so kann ich "wählen Sie" ein paar Artikel in der it (Zeilen eigentlich). Was ich hier will ist zu tun, einige updates auf den Artikel in jeder ausgewählten Zeilen, aber nach einiger Suche kann ich nicht herausfinden, wie Zugriff auf das Element in einer Zeile, obwohl ich DataItem funktionieren würde, aber es ist mir eine Null.

Edit: um es kurz Zu machen, ich habe ein GridView, die gebaut, die aus einer Datenquelle, also im Grunde die einzelnen Zeilen repräsentieren ein Objekt, und wenn ich eine checkbox überprüft, die in einer der Zeilen, will ich in der Lage, schnappen Sie sich das Objekt bezogen auf die Zeile, was ist der einfachste Weg, das zu erreichen?

DataBinding auf Page_Load:

  if (!Page.IsPostBack)
    {
        gvUnusedAccessories.DataSource = currentContext.Items.OfType<Accessory>().Where(ac => ac.Item_Parent_Id == ((PhoneLine)currentItem).Parent.Item_Id);
        gvUnusedAccessories.AutoGenerateColumns = false;
        gvUnusedAccessories.DataBind();
    }

Falle, wenn ich drücken Sie die Schaltfläche "Aktualisieren", Es tatsächlich durchsuchen der Zeilen und wenn die Zeile hat ein markiertes Feld, es ist gonna führen Sie das update:

protected void btnAddToMobile_Click(object sender, EventArgs e)
{
    foreach (GridViewRow row in gvUnusedAccessories.Rows)
    {
        if(((CheckBox)row.FindControl("chkSelect")).Checked)
        {
            ((Accessory)row.DataItem).PhoneLine_Id = currentItem.Item_Id;
        }
    }
}

Und hier ist mein GridView in der .aspx :

 <asp:GridView ID="gvUnusedAccessories" runat="server">
    <Columns>
        <asp:CommandField ShowSelectButton="True" />
        <asp:TemplateField HeaderText="Select">
            <ItemTemplate >
                <asp:CheckBox ID="chkSelect" runat="server" AutoPostBack="True"/>
            </ItemTemplate>
        </asp:TemplateField>
        <asp:BoundField DataField="Item_Id" HeaderText="ID" ReadOnly="True"/>
        <asp:BoundField DataField="Item_Name" HeaderText="Name" ReadOnly="True"/>  
        <asp:BoundField DataField="AccessoryModel" HeaderText="Modèle" ReadOnly="True"/>
        <asp:BoundField DataField="AccessoryBrand" HeaderText="Marque" ReadOnly="True"/>
    </Columns>
</asp:GridView>

Jeder Hinweis darauf, wie auf das Objekt enthalten in einer Zeile?
Ich weiß, ich könnte eigentlich bekommt man die ID und dann eine SQL-Anfrage, um meine DB, aber es scheint ein bisschen schwer und es muss eine bessere Lösung.

  • Es sei denn, Sie speichern die DataSource im ViewState oder Sitzung, sobald die Datenbindung erfolgt, verlieren Sie die Datenquelle. Das DataItem immer null sein, es sei denn, Sie dies tun. Weil ich finde mich oft speichern der Datenquelle in Aussicht Stand. Natürlich bedeutet dies, dass Ihre Seite die Größe wird immer größer. Die andere Möglichkeit, wie Sie angegeben ist, requery der Daten-Quelle mit einer Art Schlüssel. Je nach Ihren Bedürfnissen kann ich nicht sagen, welche option besser ist. Ich Neige zu der Ansicht neigen Zustand eher als eine zweite DB-Aufruf da, dass kann ein teurer Anruf zu machen.
  • Danke!!! Das war die Antwort, die ich suchte, sollte man überlegen, es als eine echte Antwort, damit kann ich markieren Sie es gelöst. Ich könnte gehen, mit den ViewState auch, die Tatsache der Schleife einer DB-Aufruf klingt wirklich fies zu mir, aus irgendeinem Grund.
InformationsquelleAutor JsGarneau | 2012-07-27
Schreibe einen Kommentar