Entfernen Sie die Zeile aus GridView

Ich habe ein grid-Ansicht auf meiner Seite und ich möchte ermöglichen, dass der Benutzer zum hinzufügen /entfernen von Elementen zu. Wie es funktioniert, und das hinzufügen von Funktionalität, die funktioniert, wenn auch wahrscheinlich nicht so toll, ist, dass ein Benutzer wählt ein Produkt aus einem drop-down-Liste, dann klickt auf Hinzufügen.

Erzeugt eine neue Zeile im grid mit den Produkt auswählen-text und ID. Die GridView markup ist:

                            <asp:GridView runat="server" ID="grdSelectedProducts" BorderWidth="1px" CellPadding="3" CellSpacing="2" AutoGenerateColumns="False" OnRowDataBound="grdSelectedProducts_OnRowDataBound" ShowHeaderWhenEmpty="True" DataKeyNames="ProductId"
                                OnRowCommand="grdSelectedProducts_RowCommand" OnRowDeleted="grdSelectedProducts_RowDeleted" OnRowDeleting="grdSelectedProducts_RowDeleting">
                                <Columns>
                                    <asp:BoundField DataField="Product" HeaderText="Product" ReadOnly="False" />
                                    <asp:TemplateField>
                                        <ItemTemplate>
                                            <asp:LinkButton runat="server" ID="linkDelete" runat="server" CommandName="Delete" CommandArgument="<%# Container.DataItemIndex %>">Remove</asp:LinkButton>
                                        </ItemTemplate>
                                    </asp:TemplateField>
                                    <asp:BoundField DataField="ProductId" HeaderText="ProductId" ReadOnly="False" Visible="False" />
                                </Columns>
                            </asp:GridView>

Die Daten in das grid gebunden ist, aber es gibt keine Verbindung zu einer Datenbank, wie es nur die Informationen aus dem drop-down.

Den linkDelete ist, wo ich will, um dem Benutzer erlauben, um ein Element zu entfernen, meine Frage ist also, wie kann ich die Zeile löschen? Ich habe die RowCommand Veranstaltung, die ich habe versucht, es zu entfernen, aber es funktioniert einfach nicht richtig zu funktionieren scheint, wie die Tabelle entweder 1) bekommt rebound mit den gleichen Daten wie vorher, oder 2) werden alle Zeilen entfernt, die durch die Bindung eines neuen DataTable. Mir fehlt etwas der Hand, aber diese Art von Gitter ist mir neu.

Jedes Beispiel, das ich gesehen habe, hier oder auf Google wurde um gridviews, die Datenbindung von SQL oder irgendeine andere Datenbank, die scheint, um die erneute Zuordnung leichter. Allerdings meine version nicht verwenden, die so verbindlich, wieder nicht richtig zu funktionieren scheint.

    protected void grdSelectedProducts_RowCommand(object sender, GridViewCommandEventArgs e)
    {
        if (e.CommandName == "Delete")
        {
            if (!string.IsNullOrEmpty(e.CommandArgument.ToString()))
            {
                int rowIndex = Convert.ToInt32(e.CommandArgument);
                grdSelectedProducts.DeleteRow(rowIndex);
                CountryDataTable = (DataTable)grdSelectedProducts.DataSource;
                DataTable table = CreateDataTable(false, string.Empty, string.Empty);
                grdSelectedProducts.DataSource = table;
                grdSelectedProducts.DataBind();
            }
        }
    }


    private DataTable CreateDataTable(bool isAddingValue, string selectedProduct, string selectedId)
    {
        //if isAddingValue is FALSE then it isn't from a button click to add a Product, it is just
        //a call to create the datatable

        DataTable dataTable = ProductDataTable;
        if (!dataTable.Columns.Contains("Product"))
        {
            dataTable.Columns.Add("Product");
            dataTable.Columns.Add("ProductId");
        }

        if (isAddingValue)
        {
            //Get the data from ViewState
            DataRow dataRow;
            dataRow = dataTable.NewRow();
            dataRow["Product"] = selectedProduct;
            dataRow["ProductId"] = selectedId;
            dataTable.Rows.Add(dataRow);
        }
        else
        {
            grdSelectedProducts.DataSource = null;
            grdSelectedProducts.DataSource = ProductDataTable;
            grdSelectedProducts.DataBind();
        }

        //Save the data back to ViewState
        ProductDataTable = dataTable;

        return dataTable;
    }

    private DataTable ProductDataTable
    {
        get {return ViewState["ProductDataTable"] as DataTable ?? new DataTable(); }
        set { ViewState["ProductDataTable"] = value; }
    }

Ich habe die RowDeleting & RowDeleted Veranstaltungen, aber ich habe keine code in es.

InformationsquelleAutor MattR | 2014-03-20
Schreibe einen Kommentar