Frage

Ich habe eine RadGrid zu einem SqlDataSource gebunden, die eine verborgene, nur lesbar Spalte, die einen pk speichert enthält. Ich möchte den Wert dieser Spalte zu einer gespeicherten Prozedur für Updates gebunden passieren, aber das Standardverhalten, wenn die Spalte nur lesbar ist, ist nicht die Parameter an die SQLDataSource zu übergeben. Meine Frage ist, ob es einen Weg gibt, diesen Wert zu übergeben, ohne hinter in den Code zu gehen. Hier ist ein Ausschnitt meiner asp Markup.

<telerik:RadGrid ID="rgEmployees" runat="server" AutoGenerateColumns="False" 
        DataSourceID="sdsEmployees" GridLines="None" AllowAutomaticUpdates="true" AllowAutomaticDeletes="true">
        <MasterTableView DataSourceID="sdsEmployees" EditMode="EditForms">
            <Columns>
                <telerik:GridEditCommandColumn ButtonType="ImageButton" HeaderStyle-Width="20px"
                    UniqueName="Edit" HeaderText="Edit">
                    <HeaderStyle Width="10px"></HeaderStyle>
                    <ItemStyle HorizontalAlign="Center" Width="10px" />                        
                </telerik:GridEditCommandColumn>
                <telerik:GridBoundColumn DataField="pkWorkerID" HeaderText="pkWorkerID" UniqueName="pkWorkerID" SortExpression="pkWorkerID" Visible="false" ReadOnly="true"></telerik:GridBoundColumn>
                <telerik:GridBoundColumn DataField="ContractManagerName" HeaderText="ContractManager Name" UniqueName="ContractManagerName" SortExpression="ContractManagerName" Visible="true" ReadOnly="true"></telerik:GridBoundColumn>
                <telerik:GridDropDownColumn 
                    DataField="CODE" 
                    HeaderText="Financial Software Name" 
                    DataSourceID="sdsFinancialSystemGetUnassignedWorkers" 
                    ListTextField="NAME" 
                    ListValueField="CODE" 
                    EnableEmptyListItem="true"
                    DropDownControlType="RadComboBox">                                            
                 </telerik:GridDropDownColumn>                     
            </Columns>
        </MasterTableView>
    </telerik:RadGrid>
<asp:SqlDataSource ID="sdsEmployees" runat="server"
            ConnectionString="" ProviderName="System.Data.SqlClient" 
            SelectCommand="spFinancialSystemGetWorkerMappingDataSource" SelectCommandType="StoredProcedure" 
            UpdateCommand="spFinancialSystemMapWorkerToCode" UpdateCommandType="StoredProcedure" 
            DeleteCommand="spFinancialSystemRemoveWorkerMapping" DeleteCommandType="StoredProcedure">
            <SelectParameters>
                <asp:ControlParameter ControlID="hfpkSystemSupportedFinancialSoftware" Name="pkSystemSupportedFinancialSystems"
                    Type="Int32" />
            </SelectParameters>
            <UpdateParameters>
                <asp:ControlParameter ControlID="hfpkSystemSupportedFinancialSoftware" Name="pkSystemSupportedFinancialSystems"
                    Type="Int32" PropertyName="Value" />
                <asp:Parameter Name="pkWorkerID" Type="Int32" />
                <asp:Parameter Name="CODE" Type="String" />    
            </UpdateParameters>
            <DeleteParameters>
                <asp:ControlParameter ControlID="hfpkSystemSupportedFinancialSoftware" Name="pkSystemSupportedFinancialSystems"
                    Type="Int32" PropertyName="Value" />
                <asp:Parameter Name="pkWorkerID" Type="Int32" />                    
            </DeleteParameters>
        </asp:SqlDataSource>

Die gespeicherte Prozedur Prototyp sieht wie folgt aus:

CREATE PROCEDURE [dbo].[spFinancialSystemMapWorkerToCode] 
@pkWorkerID int,
@pkSystemSupportedFinancialSystems int,
@CODE nvarchar(200)

Wenn ich die Seite laufen und versuchen, einen Datensatz ich die folgende Fehlermeldung zu bearbeiten:

Prozedur oder Funktion 'spFinancialSystemMapWorkerToCode' erwartet Parameter '@pkWorkerID', die nicht geliefert wurde.

Wenn ich nur lesbar = „false“ auf dem Münster Es funktioniert gut, aber dann kann der Benutzer den Primärschlüsselwert bearbeiten, die nicht erwünscht ist. Ich weiß, Arbeit arounds in Code-behind aber ist es eine Möglichkeit, es gerade im Markup zu tun? Danke.

War es hilfreich?

Lösung

Andere Sache, die Sie versuchen können, ist das pkWorkerID Feld an der DataKeyNames Sammlung des Gitters hinzuzufügen. Es sollte in dem Ansichtszustand und übergab automatisch auf die gespeicherte Prozedur auf Bearbeiten gespeichert werden.

Dick

Andere Tipps

Die Antwort ist die ForceExtractValue zu InEditMode für die pkWorkerID Spalte auf

<telerik:GridBoundColumn DataField="pkWorkerID" HeaderText="pkWorkerID" UniqueName="pkWorkerID" SortExpression="pkWorkerID" Visible="false" ReadOnly="true" ForceExtractValue="InEditMode"></telerik:GridBoundColumn>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top