用户控制页面(ascx)中的Gridview为空

时间:2013-05-07 00:17:28

标签: asp.net gridview ascx

我有一个用户可以搜索项目的页面,依此类推。我使用.ascx页面在grdview中显示结果。

aspx页面只有一个seacrh框和一个按钮,在按钮点击时我想将值从文本框内传递到ascx页面并让gridview填充结果。但经过调试后,我发现按钮点击后gridview设置为null。所有其他值都在那里,结果从数据库返回。

有人可以帮忙。我一直在寻找最近几个小时的解决方案,并且已经做了一些不同的事情,但仍然无处可去。

提前致谢

修改

这是我的代码

这是aspx页面。

<%@ Register Src="Search.ascx" TagName="Search" TagPrefix="uc1" %>
    <form id="form1" runat="server">
        <div class="content">
            <div style="padding:5px;">
                <b>Search</b>: <asp:TextBox runat="server" ID="txtSearch" />
                <asp:RequiredFieldValidator ErrorMessage="*" ValidationGroup="SearchGroup" ControlToValidate="txtSearch" ID="RequiredFieldValidator1"
                    runat="server" />
            </div>
            <div style="padding:5px;">
                <asp:Button Text="Search" runat="server" ValidationGroup="SearchGroup" OnClick="btnSearch_Click" ID="btnSearch" />
            </div>
        </div>
        <asp:ScriptManager runat="server" />
        <asp:UpdatePanel runat="server">
            <ContentTemplate>
                <div class="Results">
                    <uc1:Search ID="UserControl1" runat="server" />
                </div>
            </ContentTemplate>
        </asp:UpdatePanel>

    </form>

在ASCX页面中,我有以下

                  

背后的代码

Dim test As Object = txtSearch.Text

Dim StockList As cls_Stock_Col = MyLOTSDB.LoadStock_Col()
Try
    Dim dt As DataTable = New DataTable()
    Dim dcol As New DataColumn("TradeName", GetType(System.String))
    dt.Columns.Add(dcol)

    'Create an ID column for adding to the Datatable
    dcol = New DataColumn("PackSize", GetType(System.String))
    dt.Columns.Add(dcol)

    dcol = New DataColumn("PLU", GetType(System.String))
    dt.Columns.Add(dcol)

    dcol = New DataColumn("SOH", GetType(System.String))
    dt.Columns.Add(dcol)

    dcol = New DataColumn("RetailAsCurrency", GetType(System.String))
    dt.Columns.Add(dcol)

    For Each col As DataColumn In dt.Columns
        'Declare the bound field and allocate memory for the bound field.
        Dim bfield As New BoundField()
        'Initalize the DataField value.
        bfield.DataField = col.ColumnName
        'Initialize the HeaderText field value.

        Dim DisplayName As String = ""
        Dim DataFormat As String = ""
        Dim FieldType As Type = col.GetType()
        Dim StringLength As Int32

        GetFieldDetails(TheType, col.ColumnName, DisplayName, DataFormat, FieldType, StringLength)
        bfield.HeaderText = DisplayName

        If (DataFormat = "$0.00") Then
            bfield.DataFormatString = "{0:C2}"
        End If


        bfield.SortExpression = "col.ColumnName"
        'Add the newly created bound field to the GridView.
        GridView1.Columns.Add(bfield)
    Next

    GridView1.DataSource = StockList
    GridView1.DataBind()
Catch ex As Exception

End Try

我可以调试,当我尝试将列添加到gridview时抛出错误,

再次感谢

2 个答案:

答案 0 :(得分:0)

The aspx page only has a seacrh box and a button and on 
button click I want to pass the value from inside the textbox to the ascx page

您可以通过在ascx控件上指定一个可以在调用页面上访问的公共属性来执行此操作。

在你的ascx代码背后

private string searchText ;
Public string SetSearchText
{
      get { return searchText; }
      set { return searchText; }   
}  

在按钮单击的调用页面中,只需设置ascx控件的属性

点击按钮上的主页内

YourAscxControl.SetSearchText= yourTextBox.Text.Trim();

答案 1 :(得分:0)