• Привет, Гость!
  • Войти
  • Регистрация
  • Записи
  • Форумы
  • Люди
  • Файлы
  • Работа
  • Технологии

Проблема по Update в GridView

Все форумы  Поиск  Правила  Помощь 
 Активные темы  Темы без ответов
Привет, гость! Войти
Форумы GotDotNet.Ru » ASP.NET WebForms » Проблема по Update в GridView
Страницы: 1
RSS
Проблема по Update в GridView, не получается редактирование
alien7
Сообщений: 9 Регистрация: 22.01.2010
#1
22.01.2010 15:35
Hi,Помогите с вопросом
Есть GridView с настроенным SqlDataSource
добавил кнопку Edit для каждой записи, при попытке редактирование валится ошибка

Server Error in '/c***$' Application.
--------------------------------------------------------------------------------
Error converting data type nvarchar to numeric.

Дело в том что значения некоторых полей тянутся из других таблиц и связаны по id
Как можно решить эту проблему?

<%@ Page Language="C#" AutoEventWireup="true" MasterPageFile="~/admin/master.master" CodeFile="~/admin/AccessSecurity.aspx.cs" Inherits="Pages_Main" %>

<script runat="server">

</script>

<asp:Content ID="Content1" runat="server" ContentPlaceHolderID="ContentPlaceHolder">

    <div>
        <br />
    <table width="900" align="center" border="0">
    <tr valign="top">
        <td align="left" style="height: 22px">
            <asp:LinkButton ID="LinkButton1" runat="server" Font-Names="arial" Font-Size="8pt" OnClick="LinkButton1_Click">Add new</asp:LinkButton></td>
        <td align="right" style="height: 22px">
            &nbsp;<asp:Label ID="Label1" runat="server" Text="NTGroup: " Font-Names="Arial" Font-Size="8pt"></asp:Label>
            <asp:DropDownList ID="ddlGroup" runat="server" AutoPostBack="True" DataSourceID="dsGroups"
                DataTextField="Name" DataValueField="id" Font-Names="Arial" Font-Size="8pt" OnSelectedIndexChanged="ddlGroup_SelectedIndexChanged">
            </asp:DropDownList>
            <asp:Label ID="Label2" runat="server" Text="Report Type: " Font-Names="arial" Font-Size="8pt"></asp:Label>
            <asp:DropDownList ID="ddlReportType" runat="server" AutoPostBack="True" DataSourceID="dsReportTypes"
                DataTextField="name" DataValueField="id" Font-Names="arial" Font-Size="8pt" OnSelectedIndexChanged="ddlReportType_SelectedIndexChanged">
            </asp:DropDownList>
            <asp:Label ID="Label3" runat="server" Text="Region: " Font-Names="arial" Font-Size="8pt"></asp:Label>
            <asp:DropDownList ID="ddlRegion" runat="server" AutoPostBack="True" DataSourceID="dsRegions"
                DataTextField="name" DataValueField="id" Font-Names="arial" Font-Size="8pt" OnSelectedIndexChanged="ddlRegion_SelectedIndexChanged">
            </asp:DropDownList>
            <asp:Label ID="Label4" runat="server" Font-Names="arial" Font-Size="8pt" Text="Access Type: "></asp:Label>
            <asp:DropDownList ID="ddlAccessType" runat="server" AutoPostBack="True" DataSourceID="dsAccessType"
                DataTextField="name" DataValueField="id" Font-Names="arial" Font-Size="8pt" OnSelectedIndexChanged="ddlAccessType_SelectedIndexChanged">
            </asp:DropDownList><br /><br />
        </td>
     </tr>
     
     <tr>
        <td colspan="2">
            <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True"
                AutoGenerateColumns="False" AutoGenerateDeleteButton="True" DataSourceID="dsRoles" 
                DataKeyNames="id" Width="900px" Font-Names="arial" Font-Size="8pt" PageSize="20" 
                BackColor="White" BorderColor="#999999" BorderStyle="Solid" BorderWidth="1px" 
                CellPadding="3" ForeColor="Black" GridLines="Vertical" EmptyDataText="There is no data to fetch." OnSelectedIndexChanged="GridView1_SelectedIndexChanged">
                <Columns>
                    <asp:CommandField ShowEditButton="True" />
                    <asp:BoundField DataField="id"         HeaderText="id"         SortExpression="id" ReadOnly="True" />
                    <asp:BoundField DataField="RoleName"   HeaderText="RoleName"   SortExpression="RoleName" />
                    <asp:BoundField DataField="NTGroup"    HeaderText="NTGroup"    SortExpression="NTGroup" />
                    <asp:BoundField DataField="ReportType" HeaderText="ReportType" SortExpression="ReportType" />
                    <asp:BoundField DataField="Region"     HeaderText="Region"     SortExpression="Region" />
                    <asp:BoundField DataField="AccessType" HeaderText="AccessType" SortExpression="AccessType" />
                </Columns>
                <HeaderStyle BorderColor="Chocolate" BackColor="Maroon" Font-Bold="True" ForeColor="White" />
                <FooterStyle BackColor="#CCCCCC" />
                <PagerStyle BackColor="#999999" ForeColor="Black" HorizontalAlign="Center" />
                <SelectedRowStyle BackColor="#000099" Font-Bold="True" ForeColor="White" />
                <AlternatingRowStyle BackColor="#CCCCCC" />
                <EmptyDataRowStyle HorizontalAlign="Center" />
            </asp:GridView>
        </td>
    </tr>
    </table>           

    </div>
    &nbsp; &nbsp;&nbsp; &nbsp;
    <asp:SqlDataSource ID="dsRoles" runat="server" ConnectionString="<%$ ConnectionStrings:C*** %>" 
        DeleteCommand="DELETE FROM adm_Roles WHERE (id = @id)" 
        ProviderName="<%$ ConnectionStrings:C***.ProviderName %>" 
        SelectCommand="SELECT Rol.name AS 'RoleName', Rol.NTGroup, RT.name AS 'ReportType', R.name AS 'Region', AT.name AS 'AccessType', Rol.id FROM adm_Roles AS Rol INNER JOIN adm_ReportTypes AS RT ON Rol.reporttype_id = RT.id INNER JOIN adm_Regions AS R ON Rol.region_id = R.id INNER JOIN adm_AccessTypes AS AT ON Rol.accesstype_id = AT.id"
        UpdateCommand="UPDATE adm_Roles SET [name]=@RoleName , reporttype_id=@ReportType, region_id=@Region, accesstype_id=@AccessType, NTGroup=@NTGroup WHERE (id = @id)" 
        OnSelecting="dsRoles_Selecting">
    </asp:SqlDataSource>
    
    <asp:SqlDataSource ID="dsAccessType" runat="server" ConnectionString="<%$ ConnectionStrings:C*** %>" 
        SelectCommand="SELECT [id], [name] FROM [adm_AccessTypes]">
    </asp:SqlDataSource>
    
    <asp:SqlDataSource ID="dsGroups" runat="server" ConnectionString="<%$ ConnectionStrings:C*** %>"
        SelectCommand="SELECT [id], [Name] from adm_Groups">
    </asp:SqlDataSource>
    
    <asp:SqlDataSource ID="dsReportTypes" runat="server" ConnectionString="<%$ ConnectionStrings:C*** %>"
        SelectCommand="SELECT [id], [name] FROM [adm_ReportTypes]">
    </asp:SqlDataSource>
    
    <asp:SqlDataSource ID="dsRegions" runat="server" ConnectionString="<%$ ConnectionStrings:C*** %>"
        SelectCommand="SELECT [id], [name] FROM [adm_Regions]">
    </asp:SqlDataSource>


</asp:Content>

SQL запросы

SelectCommand="SELECT Rol.name AS 'RoleName', Rol.NTGroup, RT.name AS 'ReportType', R.name AS 'Region', AT.name AS 'AccessType', Rol.id FROM adm_Roles AS Rol INNER JOIN adm_ReportTypes AS RT ON Rol.reporttype_id = RT.id INNER JOIN adm_Regions AS R ON Rol.region_id = R.id INNER JOIN adm_AccessTypes AS AT ON Rol.accesstype_id = AT.id"
UpdateCommand="UPDATE adm_Roles SET [name]=@RoleName , reporttype_id=@ReportType, region_id=@Region, accesstype_id=@AccessType, NTGroup=@NTGroup WHERE (id = @id)" 
 
 
Zorina
Сообщений: 3035 Регистрация: 15.10.2003
#2
22.01.2010 16:56
а чего именно вы хотите добиться? записывать текст в поле int?
http://asp.net/learn/data-access/ Ищи там где потерял, а не там где светло.
 
 
alien7
Сообщений: 9 Регистрация: 22.01.2010
#3
22.01.2010 17:16
чтоб запись (поле name в таблице) смотрела какой ей id соотв и эту айдишку записывало в поле int

select id from adm_roles
where name = 'редактируемое поле'
 
 
Zorina
Сообщений: 3035 Регистрация: 15.10.2003
#4
22.01.2010 17:24
ну так соответственным образом и меняйте вашу Update-команду :) а потом придумывайте, что будет, если кто-то текст напишет абракадабру которой в связанной таблице нету.

а вообще по-хорошему делать нужно так, как на скуль сказали:)
http://asp.net/learn/data-access/ Ищи там где потерял, а не там где светло.
 
 
alien7
Сообщений: 9 Регистрация: 22.01.2010
#5
22.01.2010 17:26
вопрос и состоит в том как эту апдейт команду отредактировать

там реализация немного не такая и глобальное переписывание необходимо и это критично, что касается абракадабры планирую что то типа обработки исключительной ситуации...
 
 
alien7
Сообщений: 9 Регистрация: 22.01.2010
#6
25.01.2010 17:36
вобщем доработал sql запрос, но при редактировании значения в gridview не изменяются
остаются такие какие и были, то есть значения полей возвращаются такие как до редактирования!
???
 
 
Fire-FoXy
Сообщений: 115 Регистрация: 31.08.2006
#7
26.01.2010 21:15
Данные из других таблиц можно получать использую примерно такой код:

<asp:TemplateField HeaderText="Категория" 
SortExpression="CategoryID">
    <EditItemTemplate>
        <asp:DropDownList  ID="CatDropDownList" runat="server" 
            DataSourceID="SqlDataSource2" 
DataValueField="CategoryId" 
            DataTextField="CategoryName" SelectedValue=<%# 
Bind("CategoryId") %>>
        </asp:DropDownList >
    </EditItemTemplate>
    <ItemTemplate>
        <asp:Label ID="CatLabel" runat="server" Text='<%# Eval("Category") %>'></asp:Label>
    </ItemTemplate>
</asp:TemplateField>



Источник данных DropDownList при этом выглядит так:

   <asp:SqlDataSource ID="SqlDataSource2" runat="server" 
        ConnectionString="<%$ 
ConnectionStrings:NorthwindConnectionString %>" 
        SelectCommand="SELECT [CategoryID], [CategoryName] FROM 
[Categories] ORDER BY [CategoryName]">
    </asp:SqlDataSource>


ОИсточник данных для грида содержит стандартный Update. В нем кстати если не ошибаюсь все таки необходимо указывать список параметров используемых в запросе. А то у вас просто Update а параметры не перечислены.

Вообще вот тут этот и другие неплохие примеры : http://www.intuit.ru/department/se/aspdotnet/9/1.html
 
 
lukesky
Сообщений: 14 Регистрация: 15.02.2010
#8
15.02.2010 23:04
Рекомендую попробовать FastSQLDataSource. Этот контрол ставится вместо стандартного SQLDataSource и существенно ускоряет отображение из MS SQL базы в гридах, списках и других Bound контролах.
http://www.nitrosbase.net
Почти не требует кодирования, часто можно обойтись вообще без кодирования.
Автоматически сохраняет изменения в базу
Автоматически поддерживает пэйджинг и сортировку
 
 
 
Страницы: 1
Форумы GotDotNet.Ru » ASP.NET WebForms » Проблема по Update в GridView
О сайте   Свяжитесь с нами   Версия для печати
Работает на 1С-Битрикс: Управление сайтом ASP.NET  |  Хостинг на Parking.Ru