2009-11-04 2 views
1

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

<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", то он отлично работает, но тогда пользователь может редактировать значение первичного ключа, которое нежелательно. Я знаю, как работать в коде позади, но есть ли способ сделать это прямо в разметке? Благодарю.

ответ

1

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

Дик

+0

Я закончил тем, что делать это, потому что даже с ForceExtractValue = «Всегда» pkWorkerID был не получать передан в хранимую процедуру удаления –

4

Ответ установить ForceExtractValue в InEditMode для столбца pkWorkerID

<telerik:GridBoundColumn DataField="pkWorkerID" HeaderText="pkWorkerID" UniqueName="pkWorkerID" SortExpression="pkWorkerID" Visible="false" ReadOnly="true" ForceExtractValue="InEditMode"></telerik:GridBoundColumn> 
+0

Я принимаю этот ответ, но не может в течение 2 дней, чтобы кто-то Ниндзя мой ответ и получить креди: D –

Смежные вопросы