2015-03-05 2 views
0

У меня есть текстовые поля, которые я загружаю данными из базы данных при первой загрузке страницы и после обновления базы данных. Вот некоторые из кода. Из VB кода позади:Текстовое поле, не отображающее новое текстовое значение из обновления базы данных

Private Sub doLoad() 
    Dim dvsqlClient As DataView 
    dvsqlClient = CType(sqlClient.Select(DataSourceSelectArguments.Empty), DataView) 
    toptxtCliName.Text = CType(dvsqlClient.Table.Rows(0)("ClientName"), String) 
    txtCliName.Text = CType(dvsqlClient.Table.Rows(0)("ClientName"), String) 
    ' load the rest of the textboxes 
End Sub 

После сохранения введенных данных, этот код работает:

' code that saves to database 
' show confirmation 
ScriptManager.RegisterClientScriptBlock(Me, Me.GetType(), "generateSuccess", "generate('Client Saved.', 'success', 'center');", True) 
' load everything again 
doLoad() 

На странице ASPX:

<asp:Table runat="server" BackColor="LightGray" Width="100%"> 
<asp:TableRow BackColor="LightGray"> 
    <asp:TableCell> 
     <asp:TextBox ID="toptxtCliName" Enabled="false" CssClass="big_textbox textbox-disabled" runat="server"></asp:TextBox> 
    </asp:TableCell> 
</asp:TableRow> 
<asp:TableRow> 
<asp:TableCell ColumnSpan="2"> 
<ajaxToolkit:TabContainer ID="TabContainer1" runat="server" TabStripPlacement="Top"> 
<ajaxToolkit:TabPanel runat="server" ID="ClientPanel" HeaderText="Client Info"> 
<ContentTemplate> 
<asp:UpdatePanel ID="updatePanel1" runat="server"> 
<ContentTemplate> 
<table> 
<tr> 
    <td class="right_column" colspan="5"> 
     <asp:TextBox ID="txtCliName" TabIndex="1" runat="server" CssClass="big_textbox"></asp:TextBox> 
    </td> 
</tr> 
</table> 
</ContentTemplate> 
</asp:UpdatePanel> 
</ContentTemplate> 
</ajaxToolkit:TabPanel> 
</ajaxToolkit:TabContainer> 
</asp:TableCell> 
</asp:TableRow> 
</asp:Table> 

Мой DataSource:

<asp:SqlDataSource ID="sqlClient" runat="server" 
    ConnectionString='<%$ ConnectionStrings:xConnectionString %>' 
    SelectCommand="SELECT ClientName 
        FROM view_Client 
        WHERE ClientCode = @ClientCode"> 
    <SelectParameters> 
     <asp:QueryStringParameter QueryStringField="CLICODE" Name="ClientCode"> 
     </asp:QueryStringParameter> 
    </SelectParameters> 
</asp:SqlDataSource> 

Первый раз, через nd после обновления, оба текстовых поля показывают то же, правильное, значение. После запуска сохранения и повторного запуска doLoad. toptxtCliName.text все еще сохраняет предыдущее значение, а txtCliName.text содержит новое значение. Когда я помещаю точку останова в полях кода, код показывает, что оба текстовых поля заполнены одним и тем же текстом. Но когда окно возвращается, только txtCliName.text имеет правильное значение. Если я удаляю обновление, они оба имеют правильное значение, когда страница заканчивает загрузку.

Насколько я могу судить, это тот же самый код. Может ли кто-нибудь еще увидеть то, что мне не хватает?

Это происходит на двух моих страницах, таких же структурах, как это.

ответ

1

Трудно сказать 100%, не видя всего кода, но я предполагаю, что вы нажимаете на сервер на обратном вызове ajax, и поэтому только контент в UpdatePanel может быть изменен.

toptxtCliName должно находиться внутри UpdatePanel на основе того, что вы пытаетесь выполнить. Попробуйте разместить оба элемента управления в UpdatePanel и посмотреть, поможет ли это. Некоторые другие варианты использования будут использовать две UpdatePanels или, возможно, перемещение UpdatePanel выше, чтобы оно начиналось непосредственно перед TableRow.

+0

Это, похоже, решило проблему. Следующая проблема заключается в том, что я не могу иметь эту верхнюю строку текстовых полей внутри tabcontainer. Они находятся наверху, за пределами tabcontainer, чтобы соответствовать формату оригинального приложения. Нужен ли мне пакет обновлений для них? – pixelmeow

+0

«Самое простое» решение, вероятно, переместить открывающий тег для UpdatePanel в первую строку кода, тогда вся таблица будет находиться внутри UpdatePanel. Однако, если таблица большая, это приведет к перемещению большого количества данных между клиентом и сервером при каждом обратном вызове ajax. Если таблица очень большая, может возникнуть смысл использовать JQuery или чистый javascript для совершения вызова обновления, а затем для обновления клиентской части DOM, для этого вам потребуется некоторое изменение в вашем общем подходе. – user700390

+0

Это большой стол, содержащий таблоконтейнер с тремя вкладками, много текстовых полей на первом и повторители на втором и третьем. У меня есть поле автозаполнения 'input type = text', которое я тоже не могу понять. Я почти ничего не знаю о javascript или JQuery. Будет ли работать таблоконтейнер внутри панели обновления? – pixelmeow

Смежные вопросы