从父页面访问用户控件中的SQLDatasource。

时间:2012-07-02 09:32:48

标签: asp.net vb.net user-controls

好的,所以我一直坐在这个问题上一段时间了。寻找答案无济于事,好吧,如果我使用正确的关键词:(

方案

需要一个可以在一次网站的许多不同页面上使用的搜索控件。因此,构建一个用户控件。

用户控制设置。 (儿童)

它有几个列表框,文本框,按钮和SQLDatasource。 用户在所选字段中选择或输入值,然后单击按钮,按钮Click事件将触发并从​​DB获取数据并将其存储到SQLDatasource中。这一切都很好,花花公子。

父页面设置。

这包含一个Gridview,它必须显示Child中包含的SQLDatasource中包含的数据。

问题。

我不知道如何访问要分配给Gridview的SQLDatasource。

问题。

  1. 如何访问SQLDatasource?
  2. Gridview能够分页吗?
  3. 如果2为“否”,那么使其成为页面的替代选项是什么?
  4. 将SQLDatasource分配给的最佳事件是什么 Gridview?

1 个答案:

答案 0 :(得分:0)

看起来你将一直拥有相同的连接字符串,如果是这种情况,只需去你的用户控件(.ascx.cs)后面的代码并尝试跟随,将SqlDataSource绑定到asp gridview

protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
            LoadData();
    }
    private void LoadData()
    {
        //ConnectionStringSettingsCollection ConnctionStringCollection = ConfigurationManager.ConnectionStrings;
        string ConnectionString = <your connection string>;
        string SelectQuery = string.Empty;
        //if (!HasStoredProcedure)
        //    SelectQuery = QueryOrStoredProcedure;

            DashGridDataSource.ConnectionString = ConnectionString;
            DashGridDataSource.SelectCommandType = SqlDataSourceCommandType.Text;
            DashGridDataSource.SelectCommand = SelectQuery;
            DashGridDataSource.EnableCaching = true;
            DashGrid.DataSourceID = DashGridDataSource.ID;
        }
    }

我的.ascx文件看起来如下:

<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="DashGridWidget.ascx.cs" Inherits="*****.Widgets.DashGridDefault" %>
<asp:SqlDataSource ID="DashGridDataSource" runat="server" EnableCaching="true" CacheDuration="300"></asp:SqlDataSource>
<asp:GridView ID="DashGrid" runat="server"
AllowPaging="True" AllowSorting="True" onsorting="DashGrid_Sorting">

您还可以在.ascx.cs开头的自定义控件中添加自定义属性:

public partial class DashGridDefault : System.Web.UI.UserControl
{
    public string QueryOrStoredProcedure { get; set; }
    public bool HasStoredProcedure { get; set; }
    public int DatabaseEnum { get; set; }

这就是我使用控件的方式:

<Dashboard:IconGrid runat="server" ID="proceedings" DatabaseEnum="3" HasStoredProcedure="false" SessionVariableID="Proceeding" QueryOrStoredProcedure="SELECT TOP 100 CONTACTS FROM CUSTOMERS" />