2016-07-18 10 views
0

У меня есть gridview, у которого есть метка и 3 флажка с кнопкой «Редактировать», но когда я пытаюсь отредактировать одну из строк в моем gridview, я получаю эту ошибку. System.Data.SqlClient.SqlException: Должен объявить скалярную переменную «@ chkBeg1». вот мой код:Должен объявить скалярную переменную «@ chkBeg1»

<asp:GridView class="gridview" ID="GridView1" runat="server" AutoGenerateColumns="false" 
     DataKeyNames="id" SkinID="Professional" Font-Name="Verdana" 
       Font-Size="10pt" Cellpadding="4" 
      HeaderStyle-BackColor="#109a50" 
      HeaderStyle-ForeColor="White" 
       AlternatingRowStyle-BackColor="#dddddd" DataSourceID="SqlDataSource1" > 
      <Columns> 

       <asp:BoundField DataField="language" HeaderText="language" 
        SortExpression="language" /> 
       <asp:TemplateField HeaderText="Beginner"> 
       <ItemTemplate> 
        <asp:CheckBox ID="chkBeg" runat="server" Checked ='<%# GetStatus(Eval("Beginner")) %>' Enabled="False" onclick="CheckBoxCheck(this);" /> 
       </ItemTemplate> 
       <EditItemTemplate> 
        <asp:CheckBox ID="chkBeg1" runat="server" Checked='<%# GetStatus(Eval("Beginner")) %>' Enabled="True" onclick="CheckBoxCheck(this);" /> 
       </EditItemTemplate> 
       </asp:TemplateField> 
       <asp:TemplateField HeaderText="Intermediate"> 
       <ItemTemplate> 
        <asp:CheckBox ID="chkIn" runat="server" Checked ='<%# GetStatus(Eval("Intermediate")) %>' Enabled="False" onclick="CheckBoxCheck(this);" /> 
       </ItemTemplate> 
       <EditItemTemplate> 
        <asp:CheckBox ID="chkIn1" runat="server" Checked='<%# GetStatus(Eval("Intermediate")) %>' Enabled="True" onclick="CheckBoxCheck(this);" /> 
       </EditItemTemplate> 
       </asp:TemplateField> 
       <asp:TemplateField HeaderText="Advance"> 
       <ItemTemplate> 
        <asp:CheckBox ID="chkAd" runat="server" Checked ='<%# GetStatus(Eval("Advance")) %>' Enabled="False" onclick="CheckBoxCheck(this);" /> 
       </ItemTemplate> 
       <EditItemTemplate> 
        <asp:CheckBox ID="chkAd1" runat="server" Checked='<%# GetStatus(Eval("Advance")) %>' Enabled="True" onclick="CheckBoxCheck(this);" /> 
       </EditItemTemplate> 
       </asp:TemplateField> 
       <asp:CommandField ShowEditButton="True" /> 
</Columns> 
     </asp:GridView> 

Вот код моей кнопки редактирования:

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
     ConnectionString="Data Source=db2.sescor.net;Initial Catalog=SDMS_PORTAL;User ID=sdmsusr;[email protected]" 
     ProviderName="System.Data.SqlClient" 
     SelectCommand="SELECT id, Idno, language, beginner, intermediate, advance FROM [sample_skills]" FilterExpression="Idno = '{0}'" 
     UpdateCommand="UPDATE [sample_skills] SET 
         [beginner] = @chkBeg1, [intermediate] = @chkIn1,[advance] = @chkAd1 
         WHERE [id] = @id"> 
     <FilterParameters> 
     <asp:ControlParameter Name="skills" ControlID="label9" PropertyName="Text" /> 
     </FilterParameters> 
    </asp:SqlDataSource> 

Спасибо.

ответ

1

Вы должны добавить SqlDataSource UpdateParameters Как это:

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
     ConnectionString="Data Source=db2.sescor.net;Initial Catalog=SDMS_PORTAL;User ID=sdmsusr;[email protected]" 
     ProviderName="System.Data.SqlClient" 
     SelectCommand="SELECT id, Idno, language, beginner, intermediate, advance FROM [sample_skills]" FilterExpression="Idno = '{0}'" 
     UpdateCommand="UPDATE [sample_skills] SET 
         [beginner] = @chkBeg1, [intermediate] = @chkIn1,[advance] = @chkAd1 
         WHERE [id] = @id"> 

      <UpdateParameters> 
       <asp:ControlParameter Name="chkBeg1" ControlId="CheckBox1" PropertyName="Checked"/> 
      </UpdateParameters> 


     <FilterParameters> 
     <asp:ControlParameter Name="skills" ControlID="label9" PropertyName="Text" /> 
     </FilterParameters> 
    </asp:SqlDataSource> 

Для получения дополнительной информации о SqlDataSource UpdateParameters проверить эту ссылку:

https://msdn.microsoft.com/en-us/library/system.web.ui.webcontrols.sqldatasource.updateparameters(v=vs.110).aspx

+0

Пожалуйста, вы можете добавить больше деталей .. – Emz1402

+0

почему его PropertyName является «Текст» .. он должен содержать только True или False, потому что это флажок. – Emz1402

+0

ok, проверить ответ снова.i обновлен.

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