Передача значения столбца radgrid только для чтения в хранимую процедуру

StackOverflow https://stackoverflow.com/questions/1675492

Вопрос

У меня есть radgrid, привязанный к SqlDataSource, который включает в себя скрытый столбец, доступный только для чтения, в котором хранится файл pk.Я хочу передать значение, привязанное к этому столбцу, в хранимую процедуру для обновлений, но поведение по умолчанию, когда столбец доступен только для чтения, заключается в том, чтобы не передавать параметр в sqlDataSource.Мой вопрос заключается в том, есть ли способ передать это значение без необходимости вникать в код.Вот фрагмент моей разметки asp.

<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>

Прототип хранимой процедуры выглядит следующим образом:

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

Когда я запускаю страницу и пытаюсь отредактировать запись, я получаю следующую ошибку:

Процедура или функция spFinancialSystemMapWorkerToCode ожидает параметр @pkWorkerID, который не был указан.

Если я установлю readonly="false" на, это работает нормально, но тогда пользователь может редактировать значение первичного ключа, что нежелательно.Я знаю обходные пути в коде, но есть ли способ сделать это прямо в разметке?Спасибо.

Это было полезно?

Решение

Еще вы можете попробовать добавить поле pkWorkerID в коллекцию DataKeyNames сетки.Он должен храниться в состоянии просмотра и автоматически передаваться в хранимую процедуру при редактировании.

хуй

Другие советы

Ответ заключается в том, чтобы установить для ForceExtractValue значение InEditMode для столбца pkWorkerID.

<telerik:GridBoundColumn DataField="pkWorkerID" HeaderText="pkWorkerID" UniqueName="pkWorkerID" SortExpression="pkWorkerID" Visible="false" ReadOnly="true" ForceExtractValue="InEditMode"></telerik:GridBoundColumn>
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top