首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用子ReorderList中的代码来更改SqlDataSource的ConnectionString属性?

如何用子ReorderList中的代码来更改SqlDataSource的ConnectionString属性?
EN

Stack Overflow用户
提问于 2016-09-16 17:56:17
回答 2查看 1K关注 0票数 8

我有两个ReorderList,一个是父进程,另一个是它的子进程。我想通过后台代码动态更改SqlDataSourceConnectionString属性,但我无法更改子ReorderListConnectionString属性,即使我尝试了OnItemDataBound并试图找到该控件并更改其属性,但失败了。下面是我使用的代码示例:

代码语言:javascript
复制
     <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] =@RecordingFilterId)  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是不可访问的。任何人好心给我一个线索,如何实现这一点,因为我想从后面的代码分配连接字符串。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-09-28 19:05:02

在您的ItemDataBound方法中,您可以访问SqlDataSource:

代码语言:javascript
复制
sds = (SqlDataSource)(e.Item.FindControl("SqlDataSource2"));

因此您可以更改它的ConnectionString属性。

然后,使用相同的方法(e.Item.FindControl)找到您的ReorderList控件,并将其DataSource属性设置为sds

代码语言:javascript
复制
myReorderList.DataSource = sds;

最后,不要忘记调用RedorderList的DataBind()方法。

代码语言:javascript
复制
myReorderList.DataBind();
票数 1
EN

Stack Overflow用户

发布于 2016-09-21 18:29:46

因为您的控件使用ASP.NET表达式机制从配置文件中检索连接字符串

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

你应该能够替换

代码语言:javascript
复制
 <%$ 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/

这样,您就可以完全控制向检索值的上下文提供的实际值

代码语言:javascript
复制
 <%$ CustomExpressionProvider:MyConnectionString %>
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39528613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档