2010-11-19 8 views
2

Ich bin im Moment zu versuchen, zu lernen, wie grundlegende Rasteransicht-Steuerelemente verwenden, um meine Daten anzuzeigen..NET GridView Update sendet keine UserID an die SQL-Abfrage

Zunächst habe ich versucht, alles über die aspx-Seite zu tun, um die Dinge für mich einfacher zu halten.

Alles funktioniert so gut, aber ich habe ein Problem mit einer Update-Abfrage.

Mein gewünschtes Ergebnis ist nur eine einfache 2 Spalte Tabelle, die einen Benutzernamen und dann eine Bearbeitungsschaltfläche anzeigen wird.

Das Problem ist, dass, wenn ich die Benutzer-ID nicht in den Spalten enthalten die Abfrage nichts aktualisiert.

Das ist mein SqlDataSource Code:

<asp:SqlDataSource 
    ID="sqlDataSource" 
    runat="server" 
    ConnectionString="<%$ ConnectionStrings:conn %>" 
    SelectCommand="SELECT UserID, Name FROM tblUsers;" 
    UpdateCommand="UPDATE tblUsers SET Name = @Name WHERE UserID = @UserID"> 
    <UpdateParameters> 
     <asp:Parameter Name="Name" /> 
     <asp:Parameter Name="UserID" /> 
    </UpdateParameters> 
</asp:SqlDataSource> 

Und das ist mein Gridview:

<asp:GridView 
    ID="Clients" 
    DataSourceID="sqlDataSource" 
    runat="server" 
    AllowPaging="true" 
    AllowSorting="true" 
    PageSize="25" 
    AutoGenerateColumns="False" 
    DataKeyNames="UserID"> 
    <Columns> 
     <asp:BoundField DataField="Name" HeaderText="Users Name" SortExpression="Name" /> 
     <asp:CommandField EditText="Edit" ShowEditButton="true" /> 
    </Columns> 
</asp:GridView> 

Wenn ich auf die Seite gehen und bearbeiten klicken, werden die Namensfeld Änderungen an einem Textfeld und Ich kann wählen, entweder aktualisieren oder abbrechen wie erwartet.

Aber mit dem obigen Code, wenn ich auf update klicken, zeigt es einfach die normale Tabelle wieder, ohne Änderungen an den Daten, weil SQL gerade keine UserID bekommt. Wenn ich aber <asp:BoundField DataField="UserID" HeaderText="Users ID" SortExpression="UserID" /> zu <Columns> hinzufüge, funktioniert es.

Gibt es eine Möglichkeit für mich, dies zu tun, ohne die Spalte UserID zur Tabelle hinzufügen zu müssen?

Antwort

3

können Sie den OldValuesParameterFormatString verwenden:

<asp:SqlDataSource 
    ID="sqlDataSource" 
    runat="server" 
    ConnectionString="<%$ ConnectionStrings:conn %>" 
    OldValuesParameterFormatString="original_{0}" 
    SelectCommand="SELECT UserID, Name FROM tblUsers;" 
    UpdateCommand="UPDATE tblUsers SET Name = @Name WHERE UserID = @original_UserID"> 
    <UpdateParameters> 
     <asp:Parameter Name="Name" /> 
     <asp:Parameter Name="original_UserID" /> 
    </UpdateParameters> 
</asp:SqlDataSource> 
1

Fügen Sie die Spalte hinzu und setzen Sie Visible auf False.

<asp:BoundField DataField="UserID" Visible="False" /> 
+0

Ich habe gerade versucht, dass und leider funktioniert es nicht. Vielen Dank für Ihre Zeit! –

Verwandte Themen