#asp.net #parameters #webforms #insert #dropdown
Вопрос:
Проблема: Я попытался получить доступ к раскрывающемуся значению для моей переменной operator и использовать выбранное значение для загрузки в мой параметр @operator. В моем коде я заметил, что переменная оператора была добавлена во второй раз и значение было помещено туда, но когда я удалял исходное определение параметра оператора, я получал сообщение об ошибке, что параметр не был определен.
Разметка выглядит следующим образом:
<asp:ListView ID="TypeTemplateLV" runat="server" DataKeyNames="ID" DataSourceID="SqlDataSource1" InsertItemPosition="LastItem" ItemPlaceholderID="itemPlaceholder" GroupPlaceholderID="groupplaceholder">
<LayoutTemplate>
<table runat="server">
<tr runat="server">
<td runat="server">
<table id="itemPlaceholderContainer" runat="server" border="0" style="">
<tr runat="server">
<th class="SelectHdr" runat="server">Type Driver Name</th>
<th class="SelectHdr" runat="server">TypeDriverObjID</th>
<th class="SelectHdr" runat="server">Order</th>
<th class="SelectHdr" runat="server">Base Value</th>
<th class="SelectHdr" runat="server">Math Operator</th>
<th class="SelectHdr" colspan="1" runat="server">Opt1Value</th>
<th class="SelectHdr" runat="server">Opt2Value</th>
<th class="SelectHdr" runat="server">Opt3Value</th>
<th class="SelectHdr" runat="server">Opt4Value</th>
<th class="SelectHdr" runat="server">Opt5Value</th>
<th class="SelectHdr" runat="server">Opt6Value</th>
</tr>
<tr id="groupplaceholder" runat="server">
</tr>
</table>
</td>
</tr>
<tr runat="server">
<td runat="server" style="">
<asp:DataPager ID="DataPager1" runat="server">
<Fields>
<asp:NextPreviousPagerField ButtonType="Button" ShowFirstPageButton="True" ShowLastPageButton="True" />
</Fields>
</asp:DataPager>
</td>
</tr>
</table>
<GroupTemplate>
<tr>
<asp:TreeView ID="itemplaceholder" runat="server"></asp:TreeView>
</tr>
</GroupTemplate>
<InsertItemTemplate>
<tr>
<td height=30 colspan=1>
</td>
</tr>
<tr class="InsertDriverObj">
<td colspan="11">
<asp:Label ID="Namelbl" runat="server" Text="Type Driver Name: "></asp:Label>
<asp:TextBox ID="TypeDriverNameTextBox" runat="server" Text='<%# Bind("typedrivername") %>' />
</td>
</tr>
<tr class="InsertDriverObj">
<td colspan="2" class="RightAlignTextBox">
<asp:Label ID="Orderlbl" runat="server" Width="101%" Text="Order of math operation: "></asp:Label>
<asp:TextBox ID="OrderTextBox" Width="30px" CssClass="RightAlignTextBox" runat="server" Text='<%# Bind("ordr") %>' />
</td>
<td>
<asp:Label ID="BaseVallbl" runat="server" Width="101%" Text="Base Value: "></asp:Label>
<asp:TextBox ID="BaseValueTextBox" runat="server" Width="50%" Text='<%# Bind("baseval") %>' />
</td>
<td colspan="8">
<asp:Label ID="MathOperator" runat="server" Width="120%" Text="Math Operation: "></asp:Label>
<asp:DropDownList ID="MathOperatorDropDown" OnTextChanged="MathOperatorDropDown_TextChanged" runat="server" DataTextField='<%# Session["Operator"] %>' AutoPostBack="true" >
<asp:ListItem Value="*">*</asp:ListItem>
<asp:ListItem Value=" "> </asp:ListItem>
</asp:DropDownList>
</td>
</tr>
<div runat="server" ID="DriverGroup" >
<tr class="InsertDriverObj">
<td colspan="11">
<asp:Label ID="DriverDropDownlbl" runat="server" Text="Driver Name: "></asp:Label>
<asp:DropDownList runat="server" ID="DriverObjNameDD" DataSourceID="SqlDataSource2" DataTextField="DriverName" DataValueField="DriverID" OnTextChanged="DriverObjName_TextChanged" AutoPostBack="true">
</asp:DropDownList>
<asp:SqlDataSource runat="server" ID="SqlDataSource2" ConnectionString='<%$ ConnectionStrings:DefaultEstimateConnection %>' SelectCommand="SELECT [DriverID], [DriverName] FROM [et_DriverObject]"></asp:SqlDataSource>
</td>
</tr>
<tr class="InsertDriverObj">
<th colspan="11" style="text-underline-position:below">Value Entry: </th>
</tr>
<tr class="InsertDriverObj">
<td>
<asp:Label ID="Label1" runat="server" AssociatedControlID="driverobjTB" Visible="false">Driver ID</asp:Label>
<asp:TextBox ID="driverobjTB" runat="server" Visible="false" Text='<%# Bind("driverobjid") %>' ></asp:TextBox>
</td>
<td>
<asp:Label ID="OptDescription1lbl" runat="server"><%:Session["Description1Text"]%></asp:Label>
<asp:TextBox ID="Opt1ValueTextBox" runat="server" Text='<%# Bind("value1") %>' Width="90%"/>
</td>
<td>
<asp:Label ID="OptDescription2lbl" runat="server"><%:Session["Description2Text"]%></asp:Label>
<asp:TextBox ID="Opt2ValueTextBox" runat="server" Text='<%# Bind("value2") %>' Width="90%"/>
</td>
<td>
<asp:Label ID="OptDescription3lbl" runat="server" ><%:Session["Description3Text"]%></asp:Label>
<asp:TextBox ID="Opt3ValueTextBox" runat="server" Text='<%# Bind("value3") %>' Width="90%"/>
</td>
<td>
<asp:Label ID="OptDescription4lbl" runat="server" ><%:Session["Description4Text"]%></asp:Label>
<asp:TextBox ID="Opt4ValueTextBox" runat="server" Text='<%# Bind("value4") %>' Width="90%"/>
</td>
<td>
<asp:Label ID="OptDescription5lbl" runat="server" ><%:Session["Description5Text"]%></asp:Label>
<asp:TextBox ID="Opt5ValueTextBox" runat="server" Text='<%# Bind("value5") %>' Width="90%" />
</td>
<td colspan="6">
<asp:Label ID="OptDescription6lbl" runat="server" ><%:Session["Description6Text"]%></asp:Label>
<asp:TextBox ID="Opt6ValueTextBox" runat="server" Text='<%# Bind("value6") %>' Width="90%"/>
</td>
</tr>
</div>
<tr class="InsertDriverObj">
<td colspan="11">
<asp:Button ID="InsertButton" runat="server" CommandName="Insert" Text="Insert" />
<asp:Button ID="CancelButton" runat="server" CommandName="Cancel" Text="Clear" />
</td>
</tr>
</InsertItemTemplate>
</asp:ListView>
<asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:DefaultEstimateConnection %>"
SelectCommand="SELECT * FROM [et_TypeObject] order by [Order]"
InsertCommand="Insert into [et_TypeObject] (TypeDriverName, TypeDriverObjID, [Order], BaseValue, MathOperator, Opt1Value, Opt2Value, Opt3Value, Opt4Value, Opt5Value, Opt6Value) Values (@typedrivername, @driverobjid, @ordr, @baseval, @operator, @value1, @value2, @value3, @value4, @value5, @value6)">
<InsertParameters>
<asp:Parameter Name="typedrivername" DbType="String" />
<asp:Parameter Name="driverobjid" DbType="Int32" />
<asp:Parameter Name="ordr" DbType="Int32" />
<asp:Parameter Name="baseval" DbType="Int32" />
<asp:Parameter Name="operator" DbType="String" />
<asp:Parameter Name="value1" DbType="String" />
<asp:Parameter Name="value2" DbType="String" />
<asp:Parameter Name="value3" DbType="String" />
<asp:Parameter Name="value4" DbType="String" />
<asp:Parameter Name="value5" DbType="String" />
<asp:Parameter Name="value6" DbType="String" />
</InsertParameters>
</asp:SqlDataSource>
</asp:Content>
Мой код, лежащий в основе, выглядит следующим образом:
protected void MathOperatorDropDown_TextChanged(object sender, EventArgs e)
{
DropDownList OperatorDD = (DropDownList)TypeTemplateLV.InsertItem.FindControl("MathOperatorDropDown");
Session["Operator"] = OperatorDD.SelectedValue;
//SqlDataSource1.InsertParameters.AddWithValue("@operator", OperatorDD.SelectedValue);
SqlDataSource1.InsertParameters.Add("operator", DbType.String ,OperatorDD.SelectedValue.ToString());
TextBox BVTB = (TextBox)TypeTemplateLV.InsertItem.FindControl("BaseValueTextBox");
:
:
:
Я использовал как AddWithValues, так и Add, но AddWithValues при использовании предшествующих ему параметров вставки указывает на ошибку. Все другие рекомендации по поиску решения с использованием AddWithValues, похоже, работают, когда я пытаюсь это закодировать, но я столкнулся с вышеупомянутыми проблемами при попытке применить решение.