#asp.net #vb.net
#asp.net #vb.net
Вопрос:
Вот мой formview..
<asp:FormView ID="FormView1" runat="server" DataSourceID="SqlDataSource1" DataKeyNames="recid">
<EditItemTemplate>
RECID:
<asp:TextBox ID="recid" runat="server" Text='<%# Eval("RECID") %>' ReadOnly="true" />
<br />
SHIPPER:
<asp:TextBox ID="shipper" runat="server" Text='<%# Bind("SHIPPER") %>' />
<br />
<asp:LinkButton ID="UpdateButton" runat="server" CausesValidation="True" CommandName="Update" Text="Update" />
amp;nbsp;
<asp:LinkButton ID="UpdateCancelButton" runat="server" CausesValidation="False" CommandName="Cancel" Text="Cancel" />
</EditItemTemplate>
</asp:FormView>
вот мой sqldatasource1
<asp:SqlDataSource ID="SqlDataSource1" runat="server"
ConnectionString="<%$ ConnectionStrings:ConnectionString %>"
ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>"
SelectCommand="SELECT * FROM IMPORT WHERE (RECID = ?)"
UpdateCommand="UPDATE IMPORT SET SHIPPER=@shipper WHERE RECID=@recid" >
<SelectParameters>
<asp:ControlParameter ControlID="Label1" Name="RECID" PropertyName="Text" Type="Int32" />
</SelectParameters>
<UpdateParameters>
<asp:Parameter Name="recid" Type="Int32" />
<asp:Parameter Name="shipper" Type="String" />
</UpdateParameters>
</asp:SqlDataSource>
Теперь моя проблема в том, что каждый раз, когда я обновляю страницу, это ошибка, строка ввода была не в правильном формате.
Я попытался изменить @recid в UpdateCommand на постоянное UpdateCommand=»ОБНОВИТЬ ИМПОРТНЫЙ НАБОР SHIPPER=@shipper ГДЕ RECID= 11186″ это сработало хорошо, обновление прошло успешно.
Я думаю, что @recid обрабатывается как строка здесь, в UpdateCommand. Может кто-нибудь, пожалуйста, помогите мне? Что мне нужно сделать, чтобы изменить тип данных @recid на Integer ?
Спасибо!
Комментарии:
1. Каков тип данных RECID в базе данных?
2. привет! RECID — целое число, автоматически увеличивается в базе данных, это первичный ключ.
Ответ №1:
Первое, что вам нужно исправить, это связать raceid
с текстовым полем, как показано ниже:
<asp:TextBox ID="recid" runat="server" Text='<%# Bind("RECID") %>' ReadOnly="true" />
Теперь возникает вопрос о поставщике. В используемой вами команде select используется RACEID = ?
?
для OleDb
или Odbc
. Если вы используете какой-либо из них, вам необходимо изменить команду обновления на это:
UpdateCommand="UPDATE IMPORT SET SHIPPER=? WHERE RECID=?"
И обновите параметры до этого (обратите внимание на их порядок):
<UpdateParameters>
<asp:Parameter Name="shipper" Type="String" />
<asp:Parameter Name="recid" Type="Int32" />
</UpdateParameters>
Я бы рекомендовал прочитать эту статью MSDN: использование параметров с элементом управления SqlDataSource
Комментарии:
1. большое вам спасибо за это, сэр! 🙂 я с трудом решал эту проблему в течение недели, я думаю? мой вопрос в том, почему вместо BIND это был EVAL? но опять же, большое вам спасибо!
2.
Eval
это один из способов привязки для отображения данных.Bind
работает в обоих направлениях, от источника к элементу управления и от элемента управления к источнику.