Mehrere DataKeyNames in einem GridView

Ich habe ein GridView-bevölkert von einer ObjectDataSource mit zwei Elemente in der DataKeyNames-Feld. Einer ist der primäre Schlüssel, die ID, das andere ist ein Kategorie Feld (das Feld "Kategorie" wird verwendet, um header-Zeilen als Trennzeichen zwischen den Kategorien).

Anzeige funktioniert gut, aber ich bin versuchen, um eine Löschen-Aktion. Das Objekt die delete-Methode muss nur das Feld " ID " und in das ObjectDataSource-auch wenn ich die Methode bestimmen, wie brauchen nur ein ID-Feld .net beschwert, denn er ist auf der Suche nach einer Methode, die sowohl die definierten Felder DataKeyNames.

Es funktioniert, wenn ich einen parameter für die Kategorie zu der die delete-Methode, aber es ist ärgerlich, haben einen parameter definiert, die nicht für alles verwendet.

Kann ich konfigurieren das ObjectDataSource-und GridView-Objekte haben zwei Werte für die DataKeyNames-aber bestimmte, die würde übergeben werden sollen, welche Methoden?

Die (vereinfachte) Definitionen für die beiden Objekte sind:

<asp:ObjectDataSource ID="ObjDS1" runat="server" SelectMethod="getAllItems" 
    TypeName="Items" DeleteMethod="deleteItem">
    <DeleteParameters>
        <asp:Parameter Name="ID" Type="Int32" />
       <!-- This shouldn't be necessary: -->
        <asp:Parameter Name="Category" Type="String" />
    </DeleteParameters>
</asp:ObjectDataSource>

<asp:GridView ID="gvJItems" runat="server" AutoGenerateColumns="False" DataKeyNames="ID,Category" 
    DataSourceID="ObjDS1">
        <Columns>
            <asp:BoundField DataField="ID" Visible="false"  HeaderText="ID" />
            <asp:BoundField DataField="Name" HeaderText="Name" ItemStyle-Width="85%"/>
            <asp:TemplateField>
                <ItemTemplate>
                    <asp:LinkButton ID="lbDelete" Runat="server" 
                        OnClientClick="return confirm('Are you sure you want to delete this?');"
                            CommandName="Delete">Delete</asp:LinkButton>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>
InformationsquelleAutor Dana | 2008-11-28
Schreibe einen Kommentar