Gridview на странице управления пользователем (ascx) имеет значение null
У меня есть страница, откуда пользователь может искать предметы и так далее. Я использую страницу.ascx для отображения результата в grdview.
Страница aspx имеет только поле seacrh и кнопку, и при нажатии кнопки я хочу передать значение из текстового поля на страницу ascx и заполнить вид сетки результатом. Но после отладки я обнаружил, что после нажатия кнопки gridview становится равным нулю. Все остальные значения есть, и результат возвращается из базы данных.
Может кто-нибудь, пожалуйста, помогите. Я искал решение в течение последних нескольких часов и пробовал несколько разных вещей, но все еще нигде не получил.
заранее спасибо
РЕДАКТИРОВАТЬ
Вот мой код
Это страница 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 ответа
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();
Пользовательский динамический контент-заполнитель.
Обратитесь к следующим ссылкам, они могут помочь: -
http://www.denisbauer.com/ASPNETControls/DynamicControlsPlaceholder.aspx http://www.codeproject.com/Articles/18080/Solve-Dynamic-Control-Problem-With-PostBack