C# 从代码隐藏访问SqlDataSource

C# 从代码隐藏访问SqlDataSource,c#,asp.net,C#,Asp.net,我在ASP代码中定义了一个SqlDataSource,并试图从我的C#代码中访问它。我得到一个源未知的错误。我必须做些什么才能从代码隐藏中访问它 C#代码- ASP代码- <EditItemTemplate> <asp:DropDownList ID="ddlDebtorName" runat="server" DataSourceID="SqlDataSourceDebtor"

我在ASP代码中定义了一个SqlDataSource,并试图从我的C#代码中访问它。我得到一个源未知的错误。我必须做些什么才能从代码隐藏中访问它

C#代码-

ASP代码-

            <EditItemTemplate>
                <asp:DropDownList ID="ddlDebtorName" runat="server" 
                    DataSourceID="SqlDataSourceDebtor" DataTextField="Name" 
                    DataValueField="DebtorKey">
                </asp:DropDownList>
                <asp:SqlDataSource ID="SqlDataSourceDebtor" runat="server" 
                    ConnectionString="<%$ ConnectionStrings:AuditDevConnectionString2 %>" 
                    SelectCommand="sp_fc_vm_getDebtorList" SelectCommandType="StoredProcedure">
                    <SelectParameters>
                        <asp:ControlParameter ControlID="GridView1" DefaultValue="0" Name="ClientKey" 
                            PropertyName="SelectedValue" Type="Int32" />
                    </SelectParameters>
                </asp:SqlDataSource>
            </EditItemTemplate>

SqlDataSource位于EditItemTemplate中。这意味着这个GridView的每一行都有一个SqlDataSource,不管它是什么

如果要获取GridView中第三行的SqlDataSource,您可能需要以下内容:

gv.Rows[2].FindControl("SqlDataSourceDebtor") as SqlDataSource;
编辑-我做了一个快速测试,效果很好:

    <asp:GridView runat="server" ID="gv">
        <Columns>
            <asp:BoundField DataField="str" />
            <asp:TemplateField>
                <ItemTemplate>
                    <asp:DropDownList runat="server" DataTextField="name" DataValueField="id" DataSourceID="sqlId"></asp:DropDownList>
                    <asp:SqlDataSource runat="server" ID="sqlId" ConnectionString="Data Source=DevAdam;Initial Catalog=ZoomieRest;Integrated Security = true;"
                     SelectCommand="Select top 10 id, name from zoomiesql.subjects where userid = 7"></asp:SqlDataSource>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>

这将打印出嵌入式
SqlDataSource
的连接字符串

我得到的sqlSource变量为null。@Craig-sql数据源在您的编辑模板中-请确保此行处于编辑模式,然后再尝试访问它。您能告诉我您能够捕获上述信息的例程吗?看起来好像在OnEditing事件中,该行还没有显示出来。Craig-我在数据绑定后运行了该代码。我不确定在哪个事件之后呈现编辑temaplet
    <asp:GridView runat="server" ID="gv">
        <Columns>
            <asp:BoundField DataField="str" />
            <asp:TemplateField>
                <ItemTemplate>
                    <asp:DropDownList runat="server" DataTextField="name" DataValueField="id" DataSourceID="sqlId"></asp:DropDownList>
                    <asp:SqlDataSource runat="server" ID="sqlId" ConnectionString="Data Source=DevAdam;Initial Catalog=ZoomieRest;Integrated Security = true;"
                     SelectCommand="Select top 10 id, name from zoomiesql.subjects where userid = 7"></asp:SqlDataSource>
                </ItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>
    gv.DataSource = new[] { new { str = "A" }, new { str = "B" }, new { str = "C" } };
    gv.DataBind();

    var sqlSource = gv.Rows[2].FindControl("sqlId") as SqlDataSource;
    Response.Write(sqlSource.ConnectionString);