2009-04-14 8 views
0

Ich versuche, eine listview zu erhalten, um Datenelemente automatisch zu binden und zu aktualisieren. Nachdem ich zahlreiche Beispiele und Tutorials angeschaut habe, kann ich immer noch nicht herausfinden, was mit meinem Code nicht stimmt. Das Display funktioniert einwandfrei. Es ist nur der Update-Befehl, der fehlschlägt. Hier ist mein SqlDataSource Knoten:Listenansicht UpdateCommand übergibt Nullwerte

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

Beachten Sie, dass die @VirtualName Parameter aufgenommen wird (aber nicht gebunden, weil es die PK ist). Hier ist mein asp:ListView Knoten:

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

Jedes Feedback geschätzt würde.

-Jesse

Antwort

0

ich mit ihm zu viel zu kämpfen, fand eine workarond aber es ist wirklich hässlich. Ich bekomme den Wert von den Steuerelementen im ListView ItemUpdating-Ereignis, speichere die Werte in lokalen Variablen, dann handhabe ich das Objectdatasource Updating-Ereignis, setze die Eigenschaften des Objekts mit diesen Werten. Ich verwende den DataObjectTypeName der Objektdatasource. Ich mag diese Lösung nicht, aber es ist die einzige Sache, die für mich funktioniert hat und ich kann weitergehen ...