2017-08-28 59 views
0

所以我有一個與GridView的C#頁面。出於某種原因,添加標籤和模板進行編輯後,當我點擊編輯列中的更新按鈕時,GridView消失,沒有任何記錄被更改。我知道我需要在編輯框中的數據綁定一旦用戶點擊更新,但我不知道如何。任何人都可以提出建議嗎?GridView消失更新按鈕單擊,不更新記錄

這是我的代碼。

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; 
} 
} 

這裏是我的代碼背後。

<%@ 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> 

我只想要用編輯按鈕來顯示錶格。點擊編輯按鈕後,我希望表格中的標籤成爲編輯框(如我的模板所示)。在用戶修改編輯框後,他們可以點擊更新按鈕,將更改提交到數據庫並刷新表以顯示更改的值。

這看起來非常簡單,但我現在一直在掙扎大約3個月。

請幫忙。

+0

我想到的第一件事情......你設置'Store1Data'上載?我在考慮'Store1Data'在'Postback'上重置。 –

+0

我沒有設置任何負載,除了一些本地變量,我從URL和一些查詢拉。要解決這個問題的方法是將「Store1Data.DataBind()」這樣的東西放在適當的位置嗎? –

+0

'

回答

0

這是一個最簡單但卻很有效的例子。 雖然我必須承認,Microsoft Documentation在這段代碼中非常方便。

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; } 
    } 
} 
+0

感謝您將在一起,我會看看! –

+0

經過研究,我能夠在我的代碼中實現邏輯併成功寫入數據庫。然而,我確實有一個問題。在這樣做的時候,我不得不在後面的代碼中設置Store1Data.UpdateCommand。我使用了這個:「Store1Data.UpdateCommand =」INSERT blah blah VALUES(@DispatchInfoId)「,但是我需要弄清楚如何在方法getDispatchInfoId的結果中設置@DispatchInfoId(我正在運行更新查詢中的變量) (),這是可能的嗎? –

+0

@MarleyStacy,像這樣的東西應該''dataadapt.UpdateCommand.Parameters.AddWithValue(「@ DispatchInfoId」,getDispatchInfoId());' –