Модераторы: gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> как извлечь данные из gridview в RowUpdating 
V
    Опции темы
Nickname
Дата 16.11.2007, 11:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 246
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: 1
Всего: 1



Пример запустил - все работает нормально. +1 Где то я у себя накосячил.
PM MAIL   Вверх
Servena
Дата 16.11.2007, 11:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 24.7.2007
Где: Днепропетровск

Репутация: 4
Всего: 14



ОК, покажи свой ОбжектДатасурс и Гридвью. 
PM MAIL   Вверх
Nickname
Дата 16.11.2007, 15:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 246
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: 1
Всего: 1



Код

<asp:GridView ID="GridView1" EnableViewState="true" runat="server" AutoGenerateColumns="False" DataKeyNames="employeeid" AllowSorting="True" OnRowEditing="GridView1_RowEditing" OnRowUpdating="GridView1_RowUpdating">
            <Columns>
            
                <asp:CommandField ShowEditButton="True" />
                <asp:HyperLinkField DataNavigateUrlFields="employeeid" DataNavigateUrlFormatString="default.aspx?id={0}"
                    DataTextField="employeeid" />
                <asp:ButtonField CommandName="Select" DataTextField="employeeid" HeaderText="EmployeeId"/>
                <asp:BoundField HeaderText="ID" DataField="EmployeeID"/>
                <asp:BoundField HeaderText="FirstName" DataField="firstname"/>
                <asp:BoundField HeaderText="LastName" DataField="lastname"/>
                <asp:BoundField HeaderText="TOC" DataField="titleofcourtesy"/>
                <asp:BoundField HeaderText="Notes" DataField="notes"/>
                <asp:TemplateField>
                </asp:TemplateField>
            </Columns>
            
        </asp:GridView>

Не пойму почему у вас в примере события OnRowEditing и OnRowUpdating не объявлены и все работает, а у меня без них выдает ошибку.
Код

<asp:ObjectDataSource ID="ObjectDataSource2" runat="server" TypeName="EmployeeDB" OnDataBinding="ObjectDataSource2_DataBinding" OnSelecting="ObjectDataSource2_Selecting"
        DataObjectTypeName="EmployeeDetails" OnInserted="ObjectDataSource2_Inserted">
        <InsertParameters>
            <asp:Parameter Direction="ReturnValue" Name="employeeid" Type="int32" />
        </InsertParameters>
        <%--<UpdateParameters>
            <asp:Parameter Direction="Input" Name="emp" Type="Object" />
            <asp:Parameter Direction="Input" Name="notes" Type="String" />
            <asp:Parameter Direction="Input" Name="employeeid" Type="int32" />
        </UpdateParameters>--%>
        </asp:ObjectDataSource>

PM MAIL   Вверх
Nickname
Дата 16.11.2007, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 246
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: 1
Всего: 1



На всякий случай код GridView1_RowUpdating
Код

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        ObjectDataSource2.Update();
        GridView1.EditIndex = -1;
        GridView1.DataBind();
    }

Метод для апдейта указываю программно
Код

ObjectDataSource2.UpdateMethod = "updateemployee";

Класс EmployeeDetails
Код

ublic class EmployeeDetails
{
    private int employeeid;
    public int EmployeeID
    {
        get { return employeeid; }
        set { employeeid = value; }
    }
    private string firstname;
    public string FirstName
    {
        get { return firstname; }
        set { firstname = value; }
    }
    private string lastname;
    public string LastName
    {
        get { return lastname; }
        set { lastname = value; }
    }
    private string titleofcourtesy;
    public string TitleOfCourtesy
    {
        get { return titleofcourtesy; }
        set { titleofcourtesy = value; }
    }
    private string notes;
    public string Notes
    {
        get { return notes; }
        set { notes = value; }
    }
    public EmployeeDetails(int employeeid, string firstname, string lastname, string titleofcourtesy, string notes)
    {
        this.employeeid = employeeid;
        this.firstname = firstname;
        this.lastname = lastname;
        this.titleofcourtesy = titleofcourtesy;
        this.notes = notes;
    }
    public EmployeeDetails()
    {
    }
}


Это сообщение отредактировал(а) Nickname - 16.11.2007, 15:40
PM MAIL   Вверх
Nickname
Дата 16.11.2007, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 246
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: 1
Всего: 1



В общем не передает он параметры почему-то и все на этом. Явно кде-то в коде ошибка
Код

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Web.Configuration;
using System.Data.SqlClient;
using System.Net;
using System.Collections.Generic;

public partial class _Default : System.Web.UI.Page
{
    
    protected void Page_Load(object sender, EventArgs e)
    {
        Configuration config = WebConfigurationManager.OpenWebConfiguration(Request.ApplicationPath+"/website1");
        Title = config.AppSettings.Settings["title"].Value;
        //ObjectDataSource1.TypeName = EmployeeDB;

        int page = 1;
        int pnumber = 3;
        if (Request.QueryString["page"] != null)
            page = Int32.Parse(Request.QueryString["page"]);
        int start = (page - 1) * pnumber;
        if (start == 0) start = 1;
        else start++;
        Pager1.Pnumber = pnumber;
        Pager1.Query_string = "";
        Pager1.Total = 16;
        Pager1.Page_link = 4;
        Pager1.nPage = page;
        ObjectDataSource2.SelectParameters.Clear();
        ObjectDataSource2.SelectParameters.Add("start", start.ToString());
        ObjectDataSource2.SelectParameters.Add("pnumber", pnumber.ToString());
        ObjectDataSource2.UpdateMethod = "updateemployee";
        ObjectDataSource2.InsertMethod = "insertemployee";
        
        ObjectDataSource2.SelectMethod = "getemployees_ds_pages";
        GridView1.DataSource = ObjectDataSource2;
        
        if (!IsPostBack)
        {
            ObjectDataSource1.SelectMethod = "getemployees_ds";
            ListItem li1 = new ListItem("{All}", "0");
            ListBox1.Items.Insert(0, li1);
            ListBox1.DataSource = ObjectDataSource1;
            ListBox1.DataTextField = "firstname";
            ListBox1.DataValueField = "employeeid";
            ListBox1.DataBind();
        }

        if (IsPostBack)
        {

            string par1 = ListBox1.SelectedValue;
            if (par1 != "")
            {
                ObjectDataSource2.SelectParameters.Clear();
                ObjectDataSource2.SelectMethod = "getemployee";
                ObjectDataSource2.SelectParameters.Add("employeeid", par1);
            }
        }
            
        GridView1.DataBind();
              
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        

    }


    protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
    {
        //if (e.Row.RowType == DataControlRowType.DataRow)
        //{
        //    DataRowView drv = (e.Row.DataItem as DataRowView);
        //    e.Row.Cells[1].Text += e.Row.Cells[1].Text.Replace(Environment.NewLine, "<br />");
        //    if (drv != null)
        //    {
        //        e.Row.Cells[1].Text = drv.Row[1].ToString().Replace(Environment.NewLine, "<br />");
        //    }
        //}
    }
    protected void ListBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        //string par1 = ListBox1.SelectedValue;

        //ObjectDataSource2.SelectMethod = "getemployee";
        //ObjectDataSource2.SelectParameters.Add("employeeid", par1);
        //GridView1.DataSource = ObjectDataSource2;
        //GridView1.DataBind();
        //ObjectDataSource2.SelectParameters.RemoveAt(0);
        
        
    }
    protected void ObjectDataSource2_DataBinding(object sender, EventArgs e)
    {
        
    }
    protected void ObjectDataSource2_Selecting(object sender, ObjectDataSourceSelectingEventArgs e)
    {

        if (e.InputParameters["employeeid"] == null)
        {
        }
        if (e.InputParameters["employeeid"] != null)
        {
            if (e.InputParameters["employeeid"].ToString() == "0")
            {
                e.InputParameters.Clear();
                ObjectDataSource2.SelectMethod = "getemployees_ds";
            }
        }
        
    }
    protected void ObjectDataSource2_Inserted(object sender, ObjectDataSourceStatusEventArgs e)
    {
        Label1.Text = e.ReturnValue.ToString();
    }
    protected void GridView1_RowCreated(object sender, GridViewRowEventArgs e)
    {
        if (e.Row.RowType == DataControlRowType.DataRow && e.Row.DataItem!=null)
        {
        }
    }
    protected void GridView1_SelectedIndexChanged(object sender, EventArgs e)
    {
        
    }
    protected void GridView1_Sorting(object sender, GridViewSortEventArgs e)
    {
        if (GridView1.SortExpression.StartsWith(e.SortExpression))
        {
            if (GridView1.SortDirection == SortDirection.Ascending)
                e.SortDirection = SortDirection.Descending;
        }
    }
    protected void GridView1_PageIndexChanging(object sender, GridViewPageEventArgs e)
    {
        
    }

    protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
    {
        GridView1.EditIndex = e.NewEditIndex;
        
        GridView1.DataBind();
    }

    protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
       
        ObjectDataSource2.Update();
        GridView1.EditIndex = -1;
        GridView1.DataBind();
    }
    protected void ObjectDataSource2_Updating(object sender, ObjectDataSourceMethodEventArgs e)
    {
       
    }
}


Это сообщение отредактировал(а) Nickname - 16.11.2007, 17:32
PM MAIL   Вверх
Servena
Дата 18.11.2007, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 24.7.2007
Где: Днепропетровск

Репутация: 4
Всего: 14



ОК, попробуй пока так - это упрощенный вариант без обработки количества страниц.
aspx-файл:
Код

<asp:GridView ID="GridView1" runat="server" DataSourceID="ObjectDataSource1" AutoGenerateColumns="False" 
        BackColor="White" BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px" CellPadding="3" 
        DataKeyNames="EmployeeID">
        <FooterStyle BackColor="White" ForeColor="#000066" />
        <RowStyle ForeColor="#000066" />
        <SelectedRowStyle BackColor="#669999" Font-Bold="True" ForeColor="White" />
        <PagerStyle ForeColor="#000066" HorizontalAlign="Left" BackColor="White" />
        <HeaderStyle BackColor="#006699" Font-Bold="True" ForeColor="White" />
        <Columns>
            <asp:CommandField ShowEditButton="True" />
            <asp:BoundField HeaderText="ID" DataField="EmployeeID" ReadOnly="true"/>
            <asp:BoundField HeaderText="FirstName" DataField="firstname"/>
            <asp:BoundField HeaderText="LastName" DataField="lastname"/>
            <asp:BoundField HeaderText="TOC" DataField="titleofcourtesy"/>
            <asp:BoundField HeaderText="Notes" DataField="notes"/>
        </Columns>
    </asp:GridView>        
   
    <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" TypeName="EmployeeDetails"
        SelectMethod="getemployees_ds" UpdateMethod="updateemployee">                
    </asp:ObjectDataSource>

C#-файл:
Код

пустой пока.

class-файл:
Код

public class EmployeeDetails
{
    public static void updateemployee(int employeeid, string firstname, string lastname, string titleofcourtesy, string notes)
    {
    }

    public static DataTable getemployees_ds()
    {
        DataTable dt = new DataTable();
        string queryString = "SELECT employeeid,firstname,lastname,titleofcourtesy,notes FROM EmployeeDetails";
        using (SqlConnection connection = new SqlConnection("Data Source=EWS2;Initial Catalog=teach;User ID=sa;Password=sa123;"))
        {
            SqlCommand command = new SqlCommand(queryString, connection);
            connection.Open();
            SqlDataReader reader = command.ExecuteReader();
            dt.Load(reader);
            reader.Close();
        }
        return dt;
    }
}

Ставь точку в апдейтимплуи и там все будет.
Мне кажется ошибка здесь: обрати внимание на TypeName="EmployeeDetails" и на название класса(должно быть одно и то же). Чтобы правильно передавались параметры - их нужно определить (SELECT employeeid,firstname,lastname,titleofcourtesy,notes FROM EmployeeDetails), т.е. нужно еще посмотреть функцию в которой выбираются данные - getemployees_ds?
PM MAIL   Вверх
Nickname
Дата 19.11.2007, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 246
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: 1
Всего: 1



Так работает, но только не с моим примером:(
Кстати по поводу вашего замечания:
Цитата(Servena @  18.11.2007,  22:45 Найти цитируемый пост)
Мне кажется ошибка здесь: обрати внимание на TypeName="EmployeeDetails" и на название класса(должно быть одно и то же). 

У меня EmployeeDeatils - имя класса, который описывает бизнес объект, а для TypeName я использую EmployeeDB - класс для работы с базой. Так что тут все правильно.
Функция выборки данных содержит в себе объявление параметров: 
Код

SELECT employeeid, firstname, lastname, titleofcourtesy, notes FROM ...

В общем дело в чем-то другом.
Давайте я скину свой солюшион? Только как его тут прикрепить?

Это сообщение отредактировал(а) Nickname - 19.11.2007, 13:05
PM MAIL   Вверх
Servena
Дата 19.11.2007, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 24.7.2007
Где: Днепропетровск

Репутация: 4
Всего: 14



Давай.
Внизу под смайлами есть кнопка Обзор и поле.
PM MAIL   Вверх
Nickname
Дата 19.11.2007, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 246
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: 1
Всего: 1



А вот нашел (как прикрепить)...
В проекте головной файл файл называется default.aspx (на остальные *aspx не обращайте внимание)

Присоединённый файл ( Кол-во скачиваний: 7 )
Присоединённый файл  employees.rar 18,10 Kb
PM MAIL   Вверх
Servena
Дата 19.11.2007, 13:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 24.7.2007
Где: Днепропетровск

Репутация: 4
Всего: 14



Пока понятно почему НУЛЬ - он в класс EmployeeDetails даже не заходит.
PM MAIL   Вверх
Nickname
Дата 19.11.2007, 13:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 246
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: 1
Всего: 1



Я не сомневаюсь, что это имено такsmile, но на каком-то этапе заходит - я установил точки останова на конструктор без параметров и на строчку 
Код

get { return employeeid; }

у меня до них доходит
PM MAIL   Вверх
Servena
Дата 19.11.2007, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 251
Регистрация: 24.7.2007
Где: Днепропетровск

Репутация: 4
Всего: 14



Вобщем, оставил ОбжектДатасурс1, удалил все с Пэйдж_лоад - работает. Вызывает функцию updateemployee2. В ней можно создавать объект емп и инициализировать его необходимыми полями а потом передавать в updateemployee(каряво). А лучше изменить updateemployee так чтобы он принимал все поля.
Все также, только нет той разбивки по страницам. Теперь нужно аккуратно ее вставить.

Присоединённый файл ( Кол-во скачиваний: 6 )
Присоединённый файл  Desktop.rar 4,37 Kb
PM MAIL   Вверх
Nickname
Дата 19.11.2007, 15:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 246
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: 1
Всего: 1



Servena, спасибо (+1 еще раз) - длагодоря Вам разобрался:
надо было удалить строчку
Код

GridView1.DataSource = ObjectDataSource2; // в коде пэйдж_лоад

а вместо неё вписать в свойствах gridView-а:
Код

DataSourceID="ObjectDataSource2"

Блин, ну кто ж знал
И чтоб пример окончательно работал в коде пэйдж_лоад-а нужно удалить строку:
Код

GridView1.DataBind();


Это сообщение отредактировал(а) Nickname - 19.11.2007, 16:22
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Любитель
Mymik
mr.DUDA

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Любитель, Mymik, mr.DUDA.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Разработка под ASP.NET | Следующая тема »


 




[ Время генерации скрипта: 0.0838 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.