Возможность поместить Выбранное раскрывающееся значение в параметры вставки, не принимая значение в объекте правильного параметра

#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, похоже, работают, когда я пытаюсь это закодировать, но я столкнулся с вышеупомянутыми проблемами при попытке применить решение.