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.
- msdn.microsoft.com/en-us/library/... Nach diesem
DeleteRow
löschen einer Zeile aus der Datenquelle direkt. Also keine nned der neubindung wieder. Ich denke...
Du musst angemeldet sein, um einen Kommentar abzugeben.
Erste Sache, die Sie beachten sollten ist, löschen Sie die Zeile aus dem grid nicht aus den Daten der Tabelle
Dann sind Sie wieder binden Sie die Daten-Tabelle, die kann nicht geben Sie eine änderung, Was Sie tun sollten, statt Sie zu löschen aus dem grid löschen Sie es aus datatable
Umschreiben, dass es wie
Wenn Sie es brauchen, um es zu entfernen aus der DB , vergessen Sie nicht zu tun , Und auch beachten Sie, dass der obige code jedes mal, wenn u Holen der Tabelle wird es geben u alles aus der DB
so können Sie es global , oder Sie können entfernen Sie einfach aus der DB
versuchen, diesen code