2009-04-14 5 views
0

J'essaie d'obtenir un listview pour lier automatiquement et mettre à jour les éléments de données. Après avoir regardé de nombreux exemples et tutoriels, je n'arrive toujours pas à trouver ce qui ne va pas avec mon code. L'affichage fonctionne très bien. C'est juste la commande de mise à jour qui échoue. Voici mon noeud SqlDataSource:Affichage de la liste UpdateCommand passant les nulls

<asp:SqlDataSource ID="MSSQLDataSource" runat="server" 
        ConnectionString="<%$ ConnectionStrings:DBConn%>" 
        DataSourceMode="DataSet" 
        SelectCommand="select isnull(visits, 0) as Visits, iis.VirtualName, iis.clientname, iis.devurl, iis.stagingurl , iis.liveurl from iissites iis left join (select count(*) as visits, VirtualName from devvisits group by VirtualName) dv on iis.VirtualName = dv.VirtualName order by visits desc" UpdateCommand="update iissites set clientname = @clientname, stagingurl = @stagingurl where VirtualName = @VirtualName"> 
    <UpdateParameters> 
     <asp:Parameter Name="clientname" Type="String" /> 
     <asp:Parameter Name="stagingurl" Type="String" /> 
     <asp:Parameter Name="VirtualName" Type="String" /> 
    </UpdateParameters> 
</asp:SqlDataSource> 

Notez que le paramètre @VirtualName est pris (mais pas lié parce qu'il est le PK). Voici mon noeud asp:ListView:

<asp:ListView DataSourceID="MSSQLDataSource" runat="server" DataKeyNames="VirtualName">    
    <LayoutTemplate> 
     <table cellpadding="1"> 
      <tr id="Tr1" runat="server"> 
       <th>&nbsp;</th> 
       <th id="Th2">Clent Name</th> 
       <th id="Th1">Local Site</th> 
       <th id="Th3">LHits</th> 
       <th>Staging</th> 
      </tr> 
      <tr id="ItemPlaceHolder" runat="server" ></tr> 
     </table> 
    </LayoutTemplate> 

    <ItemTemplate> 
     <tr runat="server" class='<%# Container.DataItemIndex % 2 == 0 ? "row" : "row alt" %>'> 
      <td class="command"><asp:ImageButton ImageUrl="images/edit.jpg" ID="btnEdit" runat="server" Text="Edit" CommandName="Edit" /></td> 
      <td> 
       <%#Eval("clientname") ?? "nbsp;" %> 
      </td> 
      <td align="left"> 
       <asp:LinkButton ID="LinkButton1" OnCommand="clickLink" 
           CommandName="devvisits" CommandArgument='<%#Eval("VirtualName") %>' 
           runat="server" ><%#Eval("VirtualName") ?? "nbsp;"%> 
       </asp:LinkButton> 
      </td> 
      <td align="left"> 
       <%#Eval("Visits") ?? "nbsp;" %> 
      </td> 
      <td> 
       <%#Eval("stagingurl") ?? "nbsp;" %> 
      </td> 
     </tr> 
    </ItemTemplate> 

    <EditItemTemplate> 
     <tr id="TrEdit" runat="server"> 
      <td> 
       <asp:ImageButton ImageUrl="images/cancel.jpg" runat="server" CommandName="Cancel" /> 
       <asp:ImageButton ImageUrl="images/save.jpg" runat="server" ID="UpdateButton" CommandName="Update" /> 
      </td> 
      <td> 
       <asp:TextBox ID="clientname" runat="server" Text='<%#Bind("clientname") %>' ></asp:TextBox> 
      </td> 
      <td align="left"> 
       <asp:Label ID="VirtualName" runat="server"> 
        <asp:LinkButton ID="LinkButton2" OnCommand="clickLink" 
            CommandName="devvisits" 
            CommandArgument='<%#Eval("VirtualName") %>' 
            runat="server" ><%#Eval("VirtualName") %> 
        </asp:LinkButton> 
       </asp:Label> 
      </td> 
      <td align="left"> 
       <asp:Label ID="DevHits" runat="server"> 
        <%#Eval("Visits") %> 
       </asp:Label> 
      </td> 
      <td align="left"> 
       <asp:TextBox ID="TextBox2" runat="server" Text='<%#Bind("stagingurl") %>' ></asp:TextBox> 
      </td> 
     </tr> 
    </EditItemTemplate> 
</asp:ListView> 

Tous les commentaires seraient appréciés.

-Jesse

Répondre

0

je luttais avec lui beaucoup trop, a trouvé un workarond mais il est vraiment moche. Je reçois la valeur des contrôles dans l'événement ListView ItemUpdating, stocke les valeurs dans les variables locales, puis je gère l'événement Updating objectdatasource, définissez les propriétés de l'objet avec ces valeurs. J'utilise le DataObjectTypeName de l'objectdatasource. Je n'aime pas cette solution, mais c'est la seule chose qui a fonctionné pour moi et je peux passer à autre chose ...

Questions connexes