У меня есть текстовые поля, которые я загружаю данными из базы данных при первой загрузке страницы и после обновления базы данных. Вот некоторые из кода. Из 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 имеет правильное значение. Если я удаляю обновление, они оба имеют правильное значение, когда страница заканчивает загрузку.
Насколько я могу судить, это тот же самый код. Может ли кто-нибудь еще увидеть то, что мне не хватает?
Это происходит на двух моих страницах, таких же структурах, как это.
Это, похоже, решило проблему. Следующая проблема заключается в том, что я не могу иметь эту верхнюю строку текстовых полей внутри tabcontainer. Они находятся наверху, за пределами tabcontainer, чтобы соответствовать формату оригинального приложения. Нужен ли мне пакет обновлений для них? – pixelmeow
«Самое простое» решение, вероятно, переместить открывающий тег для UpdatePanel в первую строку кода, тогда вся таблица будет находиться внутри UpdatePanel. Однако, если таблица большая, это приведет к перемещению большого количества данных между клиентом и сервером при каждом обратном вызове ajax. Если таблица очень большая, может возникнуть смысл использовать JQuery или чистый javascript для совершения вызова обновления, а затем для обновления клиентской части DOM, для этого вам потребуется некоторое изменение в вашем общем подходе. – user700390
Это большой стол, содержащий таблоконтейнер с тремя вкладками, много текстовых полей на первом и повторители на втором и третьем. У меня есть поле автозаполнения 'input type = text', которое я тоже не могу понять. Я почти ничего не знаю о javascript или JQuery. Будет ли работать таблоконтейнер внутри панели обновления? – pixelmeow