2016-09-16 14 views
8

İki ReorderList Biri ebeveyn, diğeri onun çocuğudur var. Geride kod üzerinden dinamik SqlDataSource ait ConnectionString özelliğini değiştirmek istiyorum ama ben bile OnItemDataBound çalıştı ve onun özelliğini kontrolünü bulup değiştirmeye çalışmış ama yapamadı Çocuk ReorderList ait ConnectionString özelliğini değiştiremiyorum.SqlDataSource'ın ConnectionString özelliğini Code by Child ReorderList öğesinde nasıl değiştirebilirim?

 <div class="reorderListDemo" style="width: 100%"> 
    <cc1:ReorderList ID="ReorderList1" runat="server" DataSourceID="SqlDataSource1" DataKeyField="RecordingFilterId" AllowReorder="true" 
     SortOrderField="Priority" PostBackOnReorder="False"> 
     <ItemTemplate> 
      <table style="width: 100%" cellpadding="0" cellspacing="0" border="0"> 
       <tr> 
        <td width="6%" style="padding-left:5px;padding-top:3px;"> 
         <a href="javascript:switchViews('divRF<%# Eval("RecordingFilterId") %>', 'dragHandle<%# Eval("RecordingFilterId") %>');"> 
          <img id="imgdivRF<%# Eval("RecordingFilterId") %>" border="0" src="Images/expand.png" /> 
         </a> 
        </td> 
        <td width="34%"> 
         <asp:Label ID="Label7" runat="server" Text='<%# Eval("Name") %>' meta:resourcekey="Label7Resource1" /></td> 
       </tr> 
        <tr> 
         <td colspan="6" width="100%" style="padding-right:10px;" > 
          <div id="divRF<%# Eval("RecordingFilterId") %>" style="display: none; width: 99%;"> 
           <table style="width: 100%;" cellspacing="0" cellpadding="0" border="0" > 
             <tbody> 
              <tr> 
               <td style="color: white; width: 15%; padding-left: 30px;" class="topleft" align="left"> 
                <div> 
                 <b> 
                  <asp:Label ID="Label3" runat="server" Text="Rule" meta:resourcekey="Label3Resource2"></asp:Label></b> 
                </div> 
               </td> 
              </tr> 
             </tbody> 
            </table> 
           <div class="reorderListDemo" style="margin-left: 0px;width: 97%;"> 
            <cc1:ReorderList ID="ReorderList2" runat="server" PostBackOnReorder="False" CallbackCssStyle="callbackStyle" 
             AllowReorder="True" DataKeyField="RuleId" SortOrderField="Priority" 
             > 
             <ItemTemplate>                 
               <table style="width: 100%" cellpadding="0" cellspacing="0" border="0"> 
                <tr> 
                 <td align="left" style="padding-left: 10px; width: 15%;"> 
                  <asp:Label ID="Label6" runat="server" ToolTip='<%# Eval("RuleName") %>' Text='<%# Eval("RuleName").ToString().Length > 14 ? Eval("RuleName").ToString().Substring(0,12) + ".." : Eval("RuleName").ToString() %>' /> 
                 </td> 
                </tr> 
               </table>                
             </ItemTemplate> 
             <ReorderTemplate> 
              <asp:Panel ID="Panel2" runat="server" CssClass="reorderCue" meta:resourcekey="Panel2Resource1"> 
              </asp:Panel> 
             </ReorderTemplate> 
             <DragHandleTemplate> 
              <div class="dragHandleChild" id="dragHandle<%# Eval("RecordingFilterId") %>"> 
              </div> 
             </DragHandleTemplate> 

            </cc1:ReorderList> 
            <asp:SqlDataSource ID="SqlDataSource2" runat="server" ConnectionString="<%$ ConnectionStrings:MyConnectionString %>" 
             ProviderName="<%$ ConnectionStrings:MyConnectionString.ProviderName %>" 
             OnDeleted="OnRuleDeleted" SelectCommand="SELECT RuleId,RecordingFilterId,RuleName,RecordingAction,RecordingCondition,ExtensionValue,Priority,CallType FROM rules WHERE ([RecordingFilterId] [email protected]) and RuleName &lt;&gt; '' ORDER BY [Priority] asc" 
             UpdateCommand="UPDATE [Rules] SET [Priority] = @Priority WHERE RuleId = @original_RuleID" 
             DeleteCommand="exec DeleteRule @original_RuleID" OldValuesParameterFormatString="original_{0}"> 
             <DeleteParameters> 
              <asp:Parameter Name="original_RuleID" /> 
             </DeleteParameters> 
             <SelectParameters> 
              <asp:ControlParameter ControlID="lblCategoryName" Name="RecordingFilterId" PropertyName="Text" 
               Type="String" /> 
             </SelectParameters> 
             <UpdateParameters> 
              <asp:Parameter Name="Priority" Type="Int32" /> 
              <asp:Parameter Name="original_RuleID" Type="String" /> 
             </UpdateParameters> 
            </asp:SqlDataSource> 
           </div> 
          </div> 
         </td> 
        </tr> 
       </table> 

     </ItemTemplate> 

     <ReorderTemplate> 
      <asp:Panel ID="Panel2" runat="server" CssClass="reorderCue" > 
      </asp:Panel> 
     </ReorderTemplate> 
     <DragHandleTemplate> 

      <div class="dragHandle" id="dragHandle<%# Eval("RecordingFilterId") %>"> 
      </div> 
     </DragHandleTemplate> 
    </cc1:ReorderList> 

</div> 
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:MyConnectionString %>" 
    ProviderName="<%$ ConnectionStrings:MyConnectionString.ProviderName %>" 
    SelectCommand="SELECT RecordingFilterId,Name,Description,SystemFilter,Priority FROM recordingfilters WHERE SystemFilter='1' AND STATUS =1 order BY Priority" 
    UpdateCommand="UPDATE [recordingfilters] SET [Priority] = @Priority WHERE RecordingFilterId = @original_RecordingFilterId" 
    OnDeleted="OnFilterDeleted" DeleteCommand="exec DeleteRecordingFilter @original_RecordingFilterId" 
    OldValuesParameterFormatString="original_{0}"> 
    <DeleteParameters> 
     <asp:Parameter Name="original_RecordingFilterId" /> 
    </DeleteParameters> 
    <UpdateParameters> 
     <asp:Parameter Name="Priority" Type="Int32" /> 
     <asp:Parameter Name="original_RecordingFilterId" Type="String" /> 
    </UpdateParameters> 
</asp:SqlDataSource> 

Geride ve erişilebilir kodu ile SqlDataSource1 ait ConnectionString değiştirebilir ancak SqlDataSource2 erişilebilir değil: İşte kullanıyorum kod örneğidir. Bağlantı Dizesini arkasından kod olarak atamak istediğimde, bunu nasıl başaracağımı bana bir ipucu verebilir.

+0

Bağlantı Dizesi'ni nasıl değiştirmeye çalıştığınızı biliyorum. –

+0

@Nitin Alapati Page_Load azından ben SqlDataSource1.ConnectionString = "MyNewString" yapıyorum; –

+0

@Nitin Alapati ancak sözdiziminde herhangi bir hata sqlDataSource2 –

cevap

1

alınır bağlamda sağlanır üzerinde tam zorunluluk kontrole sahip olabilir Bu şekilde, SqlDataSource erişebilirsiniz:

sds = (SqlDataSource)(e.Item.FindControl("SqlDataSource2")); 

Yani onun ConnectionString niteliğini değiştirebilir.

Sonra aynı şekilde (e.Item.FindControl) kullanarak ReorderList kontrolünü bulmak ve sds onun DataSource özelliğini ayarlayın.

myReorderList.DataSource = sds; 

Son senin RedorderList ait DataBind() yöntemini çağırmak unutmayın.

myReorderList.DataBind(); 
+0

Teşekkür etti @Lucas Delobelle –

4

kontrol yapılandırma dosyasından bağlantı dizesini almak için ASP.NET İfadeler mekanizması kullandığından

https://msdn.microsoft.com/en-us/library/d5bd1tad.aspx

kendi özel ifadesiyle

<%$ ConnectionStrings:MyConnectionString %> 

yerine mümkün olmalıdır sağlayıcısı

https://msdn.microsoft.com/en-us/library/system.web.compilation.expressionbuilder.aspx

http://haacked.com/archive/2006/11/29/Express_Yourself_With_Custom_Expression_Builders.aspx/

Eğer gerçek değer değer, ItemDataBound yöntemde

<%$ CustomExpressionProvider:MyConnectionString %> 
+0

İlk yeniden sıralama listesinin Item Data bağlı olayı için herhangi bir yolu var mı? @Wiktor Zychla –