2017-07-06 49 views
1

我知道這是非常基本的,幾乎如此基本,很難找到相關的例子。GridView上的編輯按鈕沒有用輸入框數據更新

我有一個gridview表查詢數據庫,並使用VS17我想添加一個編輯列。我使用設計器佈局生成了以下代碼,但是當我單擊編輯按鈕時,該行變爲可編輯,但更新語句不更新數據庫。一旦我點擊更新,頁面刷新並且表格消失。

我哪裏錯了?另外,我知道前任在列名中使用的拼寫錯誤。

這裏的CS文件:

<%@ Control Language="C#" AutoEventWireup="true" Inherits="CMSWebParts_Custom_Intranet_Data_inventorycountsheetcategorydatagridedit" CodeFile="~/CMSWebParts/Custom/Intranet/Data/inventorycountsheetcategorydatagridedit.ascx.cs" %> 
<br /> 

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="PartCatagoriesID" DataMember="DefaultView" DataSourceID="SqlDataSource1" EnableModelValidation="False"> 
    <Columns> 
     <asp:CommandField ShowEditButton="True" /> 
     <asp:BoundField DataField="CategoryName" HeaderText="CategoryName" SortExpression="CategoryName" /> 
     <asp:BoundField DataField="CategroyDescription" HeaderText="CategroyDescription" SortExpression="CategroyDescription" /> 
     <asp:BoundField DataField="PartCatagoriesID" HeaderText="PartCatagoriesID" InsertVisible="False" ReadOnly="True" SortExpression="PartCatagoriesID" /> 
    </Columns> 
</asp:GridView> 
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" DeleteCommand="DELETE FROM [Form_IntranetSharpTransit_PartCategories] WHERE [PartCatagoriesID] = ?" EnableViewState="False" InsertCommand="INSERT INTO [Form_IntranetSharpTransit_PartCategories] ([CategoryName], [CategroyDescription], [PartCatagoriesID]) VALUES (?, ?, ?)" ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>" SelectCommand="SELECT [CategoryName], [CategroyDescription], [PartCatagoriesID] FROM [Form_IntranetSharpTransit_PartCategories]" UpdateCommand="UPDATE [Form_IntranetSharpTransit_PartCategories] SET [CategoryName] = ?, [CategroyDescription] = ? WHERE [PartCatagoriesID] = ?"> 
    <DeleteParameters> 
     <asp:Parameter Name="PartCatagoriesID" Type="Int32" /> 
    </DeleteParameters> 
    <InsertParameters> 
     <asp:Parameter Name="CategoryName" Type="String" /> 
     <asp:Parameter Name="CategroyDescription" Type="String" /> 
     <asp:Parameter Name="PartCatagoriesID" Type="Int32" /> 
    </InsertParameters> 
    <UpdateParameters> 
     <asp:Parameter Name="CategoryName" Type="String" /> 
     <asp:Parameter Name="CategroyDescription" Type="String" /> 
     <asp:Parameter Name="PartCatagoriesID" Type="Int32" /> 
    </UpdateParameters> 
</asp:SqlDataSource> 

這裏的ASCX文件:

using System; 
using System.Data; 
using System.Configuration; 
using System.Collections; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Web.UI.HtmlControls; 

using CMS.PortalControls; 
using CMS.GlobalHelper; 
using CMS.TreeEngine; 
using CMS.CMSHelper; 
using CMS.ExtendedControls; 

public partial class CMSWebParts_Custom_Intranet_Data_inventorycountsheetcategorydatagridedit: CMSAbstractWebPart 
{ 

    /// <summary> 
    /// Enables or disables resolving of inline controls. 
    /// </summary> 
    public bool ResolveDynamicControls 
    { 
     get 
     { 
      return ValidationHelper.GetBoolean(this.GetValue("ResolveDynamicControls"), true); 
     } 
     set 
     { 
      this.SetValue("ResolveDynamicControls", value); 
     } 
    } 


    /// <summary> 
    /// Enables or disables HTML encoding of text. 
    /// </summary> 
    public bool EncodeText 
    { 
     get 
     { 
      return ValidationHelper.GetBoolean(this.GetValue("EncodeText"), false); 
     } 
     set 
     { 
      this.SetValue("EncodeText", value); 
     } 
    } 


    /// <summary> 
    /// Content loaded event handler. 
    /// </summary> 
    public override void OnContentLoaded() 
    { 
     base.OnContentLoaded(); 
     SetupControl(); 
    } 


    /// <summary> 
    /// Initializes the control properties. 
    /// </summary> 
    protected void SetupControl() 
    { 
     if (this.StopProcessing) 
     { 
      // Do not process 
     } 
     else 
     { 

     } 
    } 


    /// <summary> 
    /// Reloads the control data. 
    /// </summary> 
    public override void ReloadData() 
    { 
     base.ReloadData(); 

     SetupControl(); 
    } 



} 

非常基本的,我知道,但這不是我的強項,我好像不能找到一個適用的例子或少量文件。任何幫助,將不勝感激!

回答

0

您可能需要將以下屬性添加到您的網格視圖中,然後在您的代碼中實現它們。如果你使用VS17,它會幫助你做到這一點。在網格視圖內部,首先輸入OnRowEditing,OnRowUpdating。這應該讓你開始。您可能也想要實施OnRowCancelingEdit方法。

+0

我用這個建議來創建一個GridView1_RowEditing方法。基本上,這種方法將以某種方式存儲表單中的內容,OnRowUpdating方法將會是什麼?執行某種更新的查詢? –

+0

您可能需要考慮使用數據表和數據適配器。這[鏈接](https://msdn.microsoft.com/en-us/library/z1z2bkx2(v = vs.110).aspx)可能會有所幫助。 – gh0st

+0

非常感謝!我會在午餐時間閱讀數據表,看看! –