2016-09-16 70 views
8

我有兩個ReorderList一個是父母,另一個是孩子。我想通過後面的代碼動態更改SqlDataSourceConnectionString屬性,但我無法更改ConnectionString子項ReorderList的屬性,即使我嘗試了OnItemDataBound,並試圖找到該控件並更改其屬性,但未能。這裏是一個代碼示例我使用的:如何通過後面的代碼在子ReorderList中更改SqlDataSource的ConnectionString屬性?

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

我可以通過代碼改變SqlDataSource1ConnectionString後面,它的訪問,但SqlDataSource2不可訪問。任何人都會給我一個線索如何實現這一點,因爲我想從後面的代碼中分配連接字符串。

+0

我可以知道你是如何改變連接字符串的嗎? –

+0

@Nitin Alapati在Page_Load我在做SqlDataSource1.ConnectionString =「MyNewString」; –

+0

@Nitin Alapati但無法訪問sqlDataSource2 –

回答

1

在你ItemDataBound方法的上下文總勢在必行控制,您可以訪問的SqlDataSource:

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

所以你可以改變它的ConnectionString屬性。

然後,用同樣的方式(e.Item.FindControl)找到你ReorderList控制,其DataSource屬性設置爲sds

myReorderList.DataSource = sds; 

最後,別忘了打電話給你的RedorderList的DataBind()方法。

myReorderList.DataBind(); 
+0

謝謝@Lucas Delobelle –

4

因爲你的控件使用ASP.NET表達機制,從配置文件中檢索連接字符串

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

你應該能夠與自己的自定義表達式替換

<%$ ConnectionStrings:MyConnectionString %> 

提供商

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/

這樣你可以有過什麼實際值提供給其中的值被檢索

<%$ CustomExpressionProvider:MyConnectionString %> 
+0

有沒有辦法在First Reorder List的Item Data bound事件上做到這一點? @Wiktor Zychla –

相關問題