2016-12-21 4 views
2

auf einem ASP Gridview SQL-Server-Basis Abfrage aktualisiert.Checkbox ItemTemplate nicht in ein ASP GridView

<asp:Content ID="i_cttContenu" runat="server" ContentPlaceHolderID="i_cphContenu"> 
    <asp:SqlDataSource ID="i_sdsGvOption" runat="server" ConnectionString="<%$ ConnectionStrings:... %>" 
     SelectCommand=" SELECT * FROM MyTable " SelectCommandType="Text"  
     UpdateCommand="UPDATE MyTable SET [name] = @name, prenom = @prenom, isAlive = @isAlive WHERE idWsgProgramOption = @idWsgProgramOption" UpdateCommandType="Text" 
    </asp:SqlDataSource> 

    <asp:UpdatePanel ID="i_up" runat="server"> 
     <ContentTemplate> 
      <asp:GridView ID="i_gvOption" runat="server" AutoGenerateColumns="False" DataKeyNames="idWsgProgramOption" 
       DataSourceID="i_sdsGvOption" EnableModelValidation="True"> 

       <Columns> 
        <asp:CommandField ButtonType="Image" CancelImageUrl="~/....gif" 
         CancelText="Annuler" EditImageUrl="~/....gif" 
         EditText="Update" HeaderText="M" UpdateImageUrl="~/....gif" 
         UpdateText="Save"> 
        </asp:CommandField> 


        <asp:TemplateField HeaderText="Nom" SortExpression="name"> 
         <ItemTemplate> 
          <asp:HyperLink ID="i_hlOption" runat="server" NavigateUrl='<%# Eval("idWsgProgramOption", "~/myURL") %>' 
           Text='<%# Eval("name") %>' /> 
         </ItemTemplate> 
         <EditItemTemplate> 
          <table > 
           <tr> 
            <td > 
             <asp:TextBox ID="i_tbNom" runat="server" Text='<%# Bind("name") %>' /> 
            </td> 
           </tr> 
          </table> 
         </EditItemTemplate> 
        </asp:TemplateField> 




         <asp:TemplateField HeaderText="prenom" SortExpression="prenom"> 
         <ItemTemplate> 
          <asp:HyperLink ID="i_hlprenom" runat="server" NavigateUrl='<%# Eval("prenom", "~/myURL") %>' 
           Text='<%# Eval("prenom") %>' /> 
         </ItemTemplate> 
         <EditItemTemplate> 
          <table > 
           <tr> 
            <td > 
             <asp:TextBox ID="i_tbprenom" runat="server" Text='<%# Bind("prenom") %>' /> 
            </td> 
           </tr> 
          </table> 
         </EditItemTemplate> 
        </asp:TemplateField> 



     <asp:TemplateField HeaderText="Obligatoire" > 
        <ItemTemplate> 
         <asp:CheckBox ID="CB_id1" runat="server" /> 
        </ItemTemplate> 
        <EditItemTemplate> 
          <asp:CheckBox ID="CB_id2" runat="server" /> 
         </EditItemTemplate>     
       </asp:TemplateField> 


       </Columns> 

      </asp:GridView> 



     </ContentTemplate>   


    </asp:UpdatePanel> 
</asp:Content> 

Die update() -Methode wird nicht aufgerufen, wenn ich auf die Schaltfläche zum Aktualisieren (erste Spalte) klicke. Wenn ich ein OnUpdating-Ereignis in die Datenquelle hinzufüge, wird die entsprechende Methode nie aufgerufen.

Der Code, der das Problem verursacht, ist definitiv das Kontrollkästchen. Wenn ich von der Datenquelle Update-Abfrage zu entfernen: , IsAlive = @isAlive und nur dann gesetzt:

UPDATE MyTable SET [name] = @name, prenom = @prenom, isAlive = @isAlive WHERE idWsgProgramOption = @idWsgProgramOption; 

Dann aktualisiert er in Ordnung (mit Ausnahme des IsAlive Feld natürlich). Ich bin 100% sicher, dass das isAlive-Feld in der Basis (Bit-Typ) existiert.

So sieht es aus, dass mein Problem aus diesem Block kommt:

<asp:TemplateField HeaderText="Obligatoire" > 
        <ItemTemplate> 
         <asp:CheckBox ID="CB_id1" runat="server" /> 
        </ItemTemplate> 
        <EditItemTemplate> 
          <asp:CheckBox ID="CB_id2" runat="server" /> 
         </EditItemTemplate>     
       </asp:TemplateField> 

Gibt es verpasst etwas offensichtlich, dass ich ??

Dies ist auch der vereinfachte Code, aber wenn ich die "checked" -Eigenschaft auf das Kontrollkästchen gesetzt und korrekt bindet, ist das Kontrollkästchen Zeilen korrekt Feld. Das Problem betrifft also nicht die Auswahl, sondern nur die Aktualisierung.

+0

Sie müssen das isAlive-Feld an ein GridView 'CheckBoxField' binden, Sie können es in ein Template-Feld konvertieren, nachdem Sie es verdrahtet haben, wenn Sie müssen. Außerdem würde ich vorschlagen, das UpdatePanel zu entfernen, bis alles funktioniert. – fnostro

Antwort

1

Versuchen Sie stattdessen eine Schaltflächenspalte, damit Sie die spezifischen Befehlsnamen angeben können.

<asp:ButtonField ButtonType="Link" Text="Update" CommandName="Update" /> 
<asp:ButtonField ButtonType="Link" Text="Delete" CommandName="Delete" /> 

Aktion basierend auf e.CommandName.