ASP.NET Zone

Die ASP.NET Community. Alle Antworten rund um Microsoft® Webtechnologien
Willkommen bei ASP.NET Zone. Anmelden | Registrieren | Hilfe | Impressum | ASP.NET Zone Suchplugin

in
Home Blogs Foren FAQ Communities Fotos Downloads
Werbeanzeige

Web-Benutzersteuerelement macht in GridView Probleme

Letzter Beitrag 04-28-2012, 8:56 von Thomas Ehlert. 1 Antworten.
Beiträge sortieren: Zurück Weiter
  •  04-27-2012, 10:08 224211

    Web-Benutzersteuerelement macht in GridView Probleme

    Hallo Miteinander,

    ich bin schon einige Zeit mit einem Problem beschäftigt, zu dem ich allerdings leider keine Lösung finde.
    Zur Vereinfachung habe ich das Problem auf die Demo-Datenbank AdventureWorks vom SQL-Server angepasst und auf das wesentliche Reduziert, um die Namen der ProductSubcategories zu zu einzelnen ProductCategories zu bearbeiten.

    Ich habe ein Web-Benutzersteuerelement erstellt, welches in einem GridView dargestellt und editiert werden soll.
    Das Darstellen funktioniert auch ohne probleme, allerdings klappt das Bearbeiten nicht. Immer wenn ich auf "Bearbeiten" klicke, verschwinden die Daten.

    Wenn ich das Control direkt auf das Form einfüge (ohne Grid), funktioniert es und die Daten werden auch in der Datenbank aktualisiert.
    In dem Control ist eine private Variable, welche die ProductCategory speichert. Beim debuggen habe ich allerdings festgestellt, dass diese Variable nach dem laden leer ist.

    Zum besseren Verständnis habe ich hier den Code:

    WebForm.aspx

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="WebForm.aspx.cs" Inherits="AdventureWorks.WebForm" %>
    <%@ Register src="SubCategory.ascx" tagname="SubCategories" tagprefix="uc1" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <html xmlns="http://www.w3.org/1999/xhtml">
       <head runat="server">
           <title></title>
       </head>
       <body>
          <form id="form1" runat="server">
             <div>
                <p>
                   <asp:Label runat="server" Font-Bold="true">1. Control direkt auf Formular</asp:Label>
                   <uc1:SubCategories ID="ctlSubCategories" runat="server" ProductCategoryID='1'/>
                <br /><br />
                   <asp:Label ID="Label1" runat="server" Font-Bold="true">2. Control in GridView</asp:Label>
                   <asp:FormView ID="FormView1" runat="server"
                      DataSourceID="dsCategories" >
                      <ItemTemplate>
                         <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" ShowHeader="false"
                                       DataKeyNames="ProductCategoryID" DataSourceID="dsCategories" BorderStyle="None">
                            <Columns>
                               <asp:TemplateField  ItemStyle-BorderStyle="None" ItemStyle-VerticalAlign="Top">
                                  <ItemTemplate>
                                     <uc1:SubCategories ID="ctlCategories" runat="server" ProductCategoryID='<%# Eval("ProductCategoryID", "{0}") %>'/>
                                  </ItemTemplate>
                               </asp:TemplateField>
                            </Columns>
                         </asp:GridView>
                      </ItemTemplate>
                   </asp:FormView>
                </p>
             </div>
             <asp:SqlDataSource ID="dsCategories" runat="server"
                ConflictDetection="CompareAllValues"
                ConnectionString="<%$ ConnectionStrings:AdventureWorksConnectionString %>"
                SelectCommand="SELECT distinct ProductCategoryID FROM [AdventureWorks].[Production].[ProductSubcategory] WHERE ProductCategoryID = 1">
             </asp:SqlDataSource>
          </form>
       </body>
    </html>


    WebForm.aspx.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Data;

    namespace AdventureWorks
    {
        public partial class WebForm : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {

            }
        }
    }
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using System.Data;

    namespace AdventureWorks
    {
        public partial class WebForm : System.Web.UI.Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {

            }
        }
    }

    SubCategory.ascx

    Sub

    <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="SubCategory.ascx.cs" Inherits="AdventureWorks.WebUserControl3" %>
    <%@ Import Namespace="AdventureWorks" %>
    <p>
       <asp:FormView ID="FormView1" runat="server" DataSourceID="dsSubCategories">
          <EditItemTemplate>
             <asp:GridView ID="GridView2" runat="server" AutoGenerateColumns="False" ShowHeader="false" ShowFooter="false"
                DataKeyNames="ProductSubcategoryID" DataSourceID="dsSubCategories" BorderStyle="None" >
                <Columns>
                   <asp:BoundField DataField="ProductSubcategoryID" Visible="false" HeaderText="ProductSubcategoryID" SortExpression="ProductSubcategoryID" ReadOnly="true" />
                   <asp:BoundField DataField="Name" HeaderText="Name" SortExpression="Name" ItemStyle-Width="106" ControlStyle-Width="100" ItemStyle-BorderWidth="0" ItemStyle-HorizontalAlign="Right" />
                   <asp:CommandField ShowDeleteButton="True"  ShowEditButton="True" ButtonType="Link" />
                </Columns>
             </asp:GridView>
          </EditItemTemplate>
       </asp:FormView>
    </p>
    <asp:SqlDataSource ID="dsSubCategories" runat="server"
        ConflictDetection="CompareAllValues"
        ConnectionString="<%$ ConnectionStrings:AdventureWorksConnectionString %>"
        OldValuesParameterFormatString="original_{0}"
        SelectCommand="SELECT * FROM [AdventureWorks].[Production].[ProductSubcategory] WHERE [ProductCategoryID] = @ProductCategoryID"
        UpdateCommand="UPDATE [AdventureWorks].[Production].[ProductSubcategory] SET [Name] = @Name WHERE [ProductSubcategoryID] = @original_ProductSubcategoryID"
        OnSelecting="_data_Selecting">

        <UpdateParameters>
            <asp:Parameter Name="ProductSubcategoryID" Type="String" />
            <asp:Parameter Name="Name" Type="String" />
        </UpdateParameters>
    </asp:SqlDataSource>

    SubCategory.ascx.cs


    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;

    namespace AdventureWorks
    {
        public partial class WebUserControl3 : System.Web.UI.UserControl
        {
            protected void _data_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
            {
               System.Data.Common.DbParameter dbPar = new System.Data.SqlClient.SqlParameter();
               dbPar.DbType = System.Data.DbType.String;
               dbPar.ParameterName = "ProductCategoryID";
               dbPar.Value = strProductCategoryID;
               e.Command.Parameters.Add(dbPar);
            }

            private string strProductCategoryID;

            public string ProductCategoryID
            {
               get { return strProductCategoryID; }
               set { strProductCategoryID = value; }
            }
           
            protected void Page_Load(object sender, EventArgs e)
            {
               FormView1.DefaultMode = FormViewMode.Edit;
            }
        }
    }

     

    Hat jemand vielleicht eine Idee, wie die Variable erhalten bleibt?

    Vielen Dank schon einmal im Voraus und Grüsse

    Andreas

  •  04-28-2012, 8:56 224212 Antwort zu 224211

    AW: Web-Benutzersteuerelement macht in GridView Probleme

    Hi,

    pack die Variable einfach in den Viewstate.

    Gruß

    Thomas

Als RSS Feed in XML ansehen
Powered by Community Server (Commercial Edition)