GridView - Присвоение значения параметру

Dark_Scorpion
Дата: 28.04.2007 11:05:23
Есть источник данных
    <asp:SqlDataSource ID="sql_item_parent" runat="server"  
        ConnectionString="<%$ ConnectionStrings: zeon_connect %>"
        SelectCommand="EXEC p_item_parent_list id" 
        OnSelecting="sql_item_parent_Selecting">
        <SelectParameters>
            <asp:Parameter Name="id" Type="double" />
        </SelectParameters>
    </asp:SqlDataSource>
Перед выполнением команды SELECT присваиваем значение параметру
    protected void sql_item_parent_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
    {
        e.Command.Parameters["@id"].Value = 2;
    }
В результате при загрузке страницы:
Error converting data type nvarchar to numeric.
Почему возникает ошибка?

Если в SELECT команде "id" заменяю на значение:
        SelectCommand="EXEC p_item_parent_list 2" 
то всё работает как надо
GWhite
Дата: 28.04.2007 11:38:15
Dark_Scorpion
Есть источник данных
    <asp:SqlDataSource ID="sql_item_parent" runat="server"  
        ConnectionString="<%$ ConnectionStrings: zeon_connect %>"
        SelectCommand="EXEC p_item_parent_list id" 
        OnSelecting="sql_item_parent_Selecting">
        <SelectParameters>
            <asp:Parameter Name="id" Type="double" />
        </SelectParameters>
    </asp:SqlDataSource>
Перед выполнением команды SELECT присваиваем значение параметру
    protected void sql_item_parent_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
    {
        e.Command.Parameters["@id"].Value = 2;
    }
В результате при загрузке страницы:
Error converting data type nvarchar to numeric.
Почему возникает ошибка?

Если в SELECT команде "id" заменяю на значение:
        SelectCommand="EXEC p_item_parent_list 2" 
то всё работает как надо


в выражении "EXEC p_item_parent_list id" у тебя id воспринимается как константа а не переменная.
GWhite
Дата: 28.04.2007 11:50:53
Dark_Scorpion
Есть источник данных
    <asp:SqlDataSource ID="sql_item_parent" runat="server"  
        ConnectionString="<%$ ConnectionStrings: zeon_connect %>"
        SelectCommand="EXEC p_item_parent_list id" 
        OnSelecting="sql_item_parent_Selecting">
        <SelectParameters>
            <asp:Parameter Name="id" Type="double" />
        </SelectParameters>
    </asp:SqlDataSource>
Перед выполнением команды SELECT присваиваем значение параметру
    protected void sql_item_parent_Selecting(object sender, SqlDataSourceSelectingEventArgs e)
    {
        e.Command.Parameters["@id"].Value = 2;
    }
В результате при загрузке страницы:
Error converting data type nvarchar to numeric.
Почему возникает ошибка?

Если в SELECT команде "id" заменяю на значение:
        SelectCommand="EXEC p_item_parent_list 2" 
то всё работает как надо



может так лучше сделать
...
SelectCommand="p_item_parent_list" 
SelectCommandType="StoredProcedure"
...
Dark_Scorpion
Дата: 28.04.2007 14:41:16
получилось - теперь число передаётся хранимой процедуре.
Теперь ситуация следующая.
В GridView есть колонка, которая в режиме редактирования превращается в DropDownList (позволяющая выбрать значения из справочника). Вот этому DropDownList, а точнее его sql-источнику как раз и надо передать значение ID. А значение ID должно соответствовать значению id редактируемой строчки GridView. Как этот id можно передать?

Наверное передать id можно через параметр типа "ControlParameter". Попробовал сделать следующим образом, но не получилось (процедура заполняющая значения DropDownList выполнилась так как будто её параметр не приходил):

Источник данных для выпадающего списка:
    <asp:SqlDataSource ID="sql_item_parent" runat="server"  
        ConnectionString="<%$ ConnectionStrings: zeon_connect %>"
        SelectCommand="p_item_parent_list" 
        SelectCommandType="StoredProcedure" 
        OnSelecting="sql_item_parent_Selecting">
        <SelectParameters>
            <asp:ControlParameter Name="id" 
                Type="double" 
                ControlID="grid_view" 
                PropertyName="SelectedValue" />
        </SelectParameters>
    </asp:SqlDataSource>
Сама таблица:
    <asp:gridview ID="grid_view" runat="server"
        DataSourceID="sql_item"
        DataKeyNames="id">
        <Columns>
            ....        
            <asp:TemplateField HeaderText="Родитель">
                <EditItemTemplate>
                    <asp:DropDownList runat="server" ID="ddl_parent_name"
                        DataSourceID="sql_item_parent"
                        DataTextField="parent_name"
                        DataValueField="id"
                        SelectedValue='<%# Bind("id_item_group") %>' />
                </EditItemTemplate>
                <ItemTemplate>
                    <asp:Label ID="label_item_parent" runat="server" Text='<%# Bind("parent_name") %>' />
                </ItemTemplate>
            </asp:TemplateField>
            ....