GridView verschwindet auf Update Button Klick, aktualisiert datasatz nicht

Also habe ich ac # Seite mit einem GridView. Aus irgendeinem Grund, nach dem Hinzufügen der Beschriftung und der Vorlage für die Bearbeitung, wenn ich auf die Schaltfläche Aktualisieren in der Bearbeitungsspalte klicken, verschwindet die GridView und keiner der datasätze wird geändert. Ich weiß, ich muss die data in der Bearbeitungsbox databindieren, sobald der Benutzer auf Update klickt, aber ich bin mir nicht sicher, wie. Kann jemand irgendwelche Vorschläge geben?

Hier ist mein Code.

public partial class CMSWebParts_Custom_Development_DevWebPart : CMSAbstractWebPart { public string paramId; protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { ViewState["RefUrl"] = Request.UrlReferrer.ToString(); } string urlString = Request.UrlReferrer.ToString(); paramId = HttpUtility.ParseQueryString(urlString).Get("Theid"); DispatchNumberLabel.Text = getDispatchNumber(); //TerminalLabel.Text = getTerminal(); DispatchInfoIdLabel.Text = getDispatchInfoId(); DriverNameLabel.Text = getDriverName(); } protected string getDispatchInfoId() { string result = DriverDropDownList.SelectedValue; return result; } protected string getDispatchNumber() { string result = paramId; return result; } protected string getTerminal() { string result; string connectionString = ""; using (var con = new SqlConnection(connectionString)) { var sql = "Select Terminal from Form_IntranetSharpTransit_DispatchInfo where ([Dispatch] = @Dispatch)"; using (var cmd = new SqlCommand(sql, con)) { cmd.Parameters.AddWithValue("@Dispatch", getDispatchNumber()); con.Open(); result = (string)cmd.ExecuteScalar(); } } return result; } protected string getDriverName() { string result; string connectionString = ""; using (var con = new SqlConnection(connectionString)) { var sql = "Select Driver from Form_IntranetSharpTransit_DispatchInfo WHERE ([DispatchInfoID] = @DispatchInfoId)"; using (var cmd = new SqlCommand(sql, con)) { cmd.Parameters.AddWithValue("@DispatchInfoId", getDispatchInfoId()); con.Open(); result = (string)cmd.ExecuteScalar(); } } return result; } } 

Und hier ist mein Code hinter sich.

 <%@ Control Language="C#" AutoEventWireup="true" CodeFile="~/CMSWebParts/Custom/Development/DevWebPart.ascx.cs" Inherits="CMSWebParts_Custom_Development_DevWebPart" %> <%--<script runat="server"> protected void Page_Load(object sender, EventArgs e) { } </script>--%>Dispatch Number: <asp:Label ID="DispatchNumberLabel" runat="server"></asp:Label> <p> Terminal: <asp:Label ID="TerminalLabel" runat="server"></asp:Label> </p> <p> Current Dispatch Info ID: <asp:Label ID="DispatchInfoIdLabel" runat="server"></asp:Label> </p> <p> &nbsp;Driver Name: <asp:Label ID="DriverNameLabel" runat="server"></asp:Label> </p> <asp:DropDownList ID="DriverDropDownList" runat="server" AutoPostBack="True" DataSourceID="DriverListData" DataTextField="Select Driver" DataValueField="Column1"> </asp:DropDownList> <asp:SqlDataSource ID="DriverListData" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>" SelectCommand="Select '', 'Select Driver' as 'Select Driver' from Form_IntranetSharpTransit_DispatchInfo Union SELECT DispatchInfoID, Driver + ' - ' + CAST(DispatchInfoID AS varchar(50)) AS Expr1 FROM Form_IntranetSharpTransit_DispatchInfo WHERE (Dispatch = ?) AND (DaysOff NOT LIKE '%' + (SELECT DispatchDay FROM Form_IntranetSharpTransit_DailyDispatch Where DailydispatchID = ?) + '%') AND (Status LIKE 'Available')"> <SelectParameters> <asp:QueryStringParameter Name="?" QueryStringField="Theid" /> <asp:QueryStringParameter Name="?" QueryStringField="Theid" /> </SelectParameters> </asp:SqlDataSource> <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" AutoGenerateEditButton="True" DataSourceID="Store1Data" EditIndex="0" OnSelectedIndexChanged="GridView1_SelectedIndexChanged"> <Columns> <asp:TemplateField HeaderText="Store 1:"> <EditItemTemplate> <asp:TextBox ID="TextBox1" runat="server" AutoPostBack="True" OnTextChanged="TextBox1_TextChanged" Text='<%# Bind("[Store Number]") %>'> </asp:TextBox> </EditItemTemplate> <ItemTemplate> <asp:Label ID="Label1" runat="server" Text='<%# Bind("[Store Number]") %>'></asp:Label> </ItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> <asp:SqlDataSource ID="Store1Data" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>" SelectCommand="SELECT (SELECT Store FROM Form_IntranetSharpTransit_TourPlan WHERE (TourPlanID = Form_IntranetSharpTransit_DispatchInfo_1.Store1)) AS 'Store Number', Location1, Pro1, Store1Export FROM Form_IntranetSharpTransit_DispatchInfo AS Form_IntranetSharpTransit_DispatchInfo_1 WHERE (DispatchInfoID = ?)"> <SelectParameters> <asp:ControlParameter ControlID="DriverDropDownList" Name="?" PropertyName="SelectedValue" /> </SelectParameters> </asp:SqlDataSource> 

Alles, was ich will, ist, den Tisch mit einem Bearbeitungsknopf anzuzeigen. Wenn die Schaltfläche "Bearbeiten" geklickt wird, möchte ich, dass das Label in der Tabelle ein Bearbeitungsfeld wird (wie es meine Vorlage zeigt). Nachdem der Benutzer das Bearbeitungsfeld geändert hat, können sie dann auf die Schaltfläche "Aktualisieren" klicken, die Änderung der database vornehmen und die Tabelle aktualisieren, um die geänderten Werte anzuzeigen.

Das scheint sehr einfach zu sein, aber ich habe schon seit etwa 3 Monaten damit gekämpft.

Bitte helfen Sie.

Hier ist ein minimales, aber funktionierendes Beispiel für das, was du zu erreichen versuchst. Obwohl ich zugeben muss, kam die Microsoft Documentation ziemlich praktisch für dieses Snippet.

Default.aspx

 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="UpdateGridViewOnPostBack_45921943.Default" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <div> <asp:GridView runat="server" ID="dgv1" AutoGenerateEditButton="true" OnRowEditing="dgv1_RowEditing" OnRowUpdating="dgv1_RowUpdating"> <Columns> <asp:TemplateField> <ItemTemplate> <asp:Label runat="server" ID="gvCol1Label" Text='<%#Bind("field1") %>'></asp:Label> </ItemTemplate> <EditItemTemplate> <asp:TextBox runat="server" ID="gvCol1Txtbx" Text='<%# Bind("field1") %>'></asp:TextBox> </EditItemTemplate> </asp:TemplateField> </Columns> </asp:GridView> </div> </form> </body> </html> 

Default.aspx.cs

 using System; using System.Web.UI.WebControls; using System.Collections.ObjectModel; namespace UpdateGridViewOnPostBack_45921943 { public partial class Default : System.Web.UI.Page { static ObservableCollection<dgvEntry> dgv1Source; protected void Page_Load(object sender, EventArgs e) { if (!IsPostBack) { //Not a postback dgv1Source = new ObservableCollection<dgvEntry>(); dgv1Source.Add(new dgvEntry { field1 = "the field coming from the data source" }); initializeDGV(IsPostBack); } else { //is a postback if (dgv1Source == null) { dgv1Source = new ObservableCollection<dgvEntry>(); } initializeDGV(IsPostBack); } } private void initializeDGV(bool isPostback) { dgv1.DataSource = dgv1Source; dgv1.AutoGenerateColumns = false; if (!isPostback) { dgv1.DataBind(); } } protected void dgv1_RowEditing(object sender, GridViewEditEventArgs e) { dgv1.EditIndex = e.NewEditIndex; dgv1.DataBind(); } protected void dgv1_RowUpdating(object sender, GridViewUpdateEventArgs e) { GridViewRow row = dgv1.Rows[e.RowIndex]; dgv1Source[e.RowIndex].field1 = ((TextBox)row.Cells[1].Controls[1]).Text; dgv1.EditIndex = -1; dgv1.DataBind(); } } public class dgvEntry { public string field1 { get; set; } //public string field2 { get; set; } //public string field3 { get; set; } } }