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

Поиск:

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


Бывалый
*


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

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



После того как нажали на кнопке update, нужно получить новые данные из гридвьюв-а исохранить их в базе данных. Так вот как получить новые данные (и в нагрузку еще и старые)? Веть если я не ошибаюсь - это надо делать в обработчике RowUpdating?
PM MAIL   Вверх
Nickname
Дата 15.11.2007, 15:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Порылся в форуме и нашел, что надо использовать e.NewValues["..."], но эта колекция у меня постояно пустая и count=0/
Может это от того что я использую привязку к данным через ObjectDataSource.
Еще пытался использовать такой способ:
Код

TextBox notes = (TextBox)GridView1.Rows[e.RowIndex].FindControl("notes");

но он почемуто возвращает старую строку (так которая была до изменения).
PM MAIL   Вверх
Servena
Дата 15.11.2007, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Зачем все так сложно: все это автоматически делается при помощи Дизайнера, т.е. задаются команды с параметрами на вставку, удаление, обновление в Источнике данных, о потом этот источник подключается к ГридВью. И все работает.

Добавлено через 4 минуты и 18 секунд
Вот пример, который использует БД Northwind, он может только обновлять:
Код

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="RegionID"
            DataSourceID="SqlDataSource1">
            <Columns>
                <asp:BoundField DataField="RegionID" HeaderText="RegionID" ReadOnly="True" SortExpression="RegionID" />
                <asp:BoundField DataField="RegionDescription" HeaderText="RegionDescription" SortExpression="RegionDescription" />
                <asp:CommandField ShowEditButton="True" />
            </Columns>
        </asp:GridView>
        
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>" 
            SelectCommand="SELECT * FROM Region" 
            UpdateCommand="UPDATE Region SET  RegionDescription=@RegionDescription WHERE RegionID=@RegionID">
            <UpdateParameters>
                <asp:Parameter Name="RegionDescription" />
                <asp:Parameter Name="RegionID" />
            </UpdateParameters>
        </asp:SqlDataSource>


Строку подключения прописать в Вэб.конфике:
<connectionStrings>
  <add name="NorthwindConnectionString" connectionString="Data Source=ХХХХХ;Initial Catalog=Northwind;User ID=ХХХХ;Password=ХХХХХ"
   providerName="System.Data.SqlClient" />
 </connectionStrings>

Вообщем на словах это так: перетягиваю СКЛДатасурс, нажимаю далее и походу настраиваю там все, потом задаю команды на обновление, выборку, вставку, удаления. Потом перетягиваю ГридВью. И все работает.
PM MAIL   Вверх
Nickname
Дата 15.11.2007, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата

Зачем все так сложно: все это автоматически делается при помощи Дизайнера, т.е. задаются команды с параметрами на вставку, удаление, обновление в Источнике данных, о потом этот источник подключается к ГридВью. И все работает.

Че-то я не понял. А ObjectDataSource разве не источник данных?

Добавлено через 3 минуты и 6 секунд
Цитата

Код

<asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="RegionID"
            DataSourceID="SqlDataSource1">
            <Columns>
                <asp:BoundField DataField="RegionID" HeaderText="RegionID" ReadOnly="True" SortExpression="RegionID" />
                <asp:BoundField DataField="RegionDescription" HeaderText="RegionDescription" SortExpression="RegionDescription" />
                <asp:CommandField ShowEditButton="True" />
            </Columns>
        </asp:GridView>
        
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:NorthwindConnectionString %>" 
            SelectCommand="SELECT * FROM Region" 
            UpdateCommand="UPDATE Region SET  RegionDescription=@RegionDescription WHERE RegionID=@RegionID">
            <UpdateParameters>
                <asp:Parameter Name="RegionDescription" />
                <asp:Parameter Name="RegionID" />
            </UpdateParameters>
        </asp:SqlDataSource>


А можно это переделать под objectdatasource?
Просто у меня форма работает через-бизнес логику и методу обнавления передается объект.
PM MAIL   Вверх
Servena
Дата 15.11.2007, 15:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Источник, но для него нужно больше телодвижений(тебе нужно написать бизнес логику).

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


Бывалый
*


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

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



Цитата(Servena @  15.11.2007,  15:47 Найти цитируемый пост)
Источник, но для него нужно больше телодвижений(тебе нужно написать бизнес логику).

Так она у меня и написана ужеsmile
PM MAIL   Вверх
Servena
Дата 15.11.2007, 16:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



У тебя есть ОбжектДатаСурс, например:
Код

<asp:ObjectDataSource ID="ObjectDataSource1" runat="server" TypeName="SomeClass"   UpdateMethod="Update" >
        <UpdateParameters>
            <asp:Parameter Name="id" Type="Int32" />
            <asp:Parameter Name="Field1" Type="String" />            
        </UpdateParameters>        
    </asp:ObjectDataSource>


И, например, ты поменял строчку и нажал Апдейт - тогда id и Field1 этой строчки передадутся в функцию Update класса SomeClass.

А функция Update, что-то типа: public static void Update(int id, string Field1)
PM MAIL   Вверх
Nickname
Дата 15.11.2007, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Уже ближе;) Осталось только понять как передать объект (функция имеет вид: public void updateemployee(EmployeeDetails emp) )
Для ObjectDataSource-а написал
Код

... TypeName="EmployeeDB" ... DataObjectTypeName="EmployeeDetails"...

Функция вызывается - не каких ошибок не выдает но поля объекта emp заполнены нулями и пустыми строками.
Может я не правильно что-то тут делаю:
Код

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

И надо ли использовать:
Код

<UpdateParameters>
            <asp:Parameter Direction="Input" Name="emp" Type="Object" />

 </UpdateParameters>


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


Опытный
**


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

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



Использовать нужно. 
Попробуй вместо обжект передать какой-то простой тип (любое поле таблицы, например Стринговое) а в функции тоже отлови его (вместо обжекта) и посмотри - передастся или нет?
Код

        <UpdateParameters>
                  <asp:Parameter Name="Field1" Type="String" />            
        </UpdateParameters>

 
А функцию так: 
Код

public void updateemployee(String str) )


и может все что здесь:
Код

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

закомментируй.

Добавлено через 1 минуту и 24 секунды
Вообще удали это:
Код

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

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


Бывалый
*


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

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



Цитата(Servena @  15.11.2007,  16:57 Найти цитируемый пост)
Попробуй вместо обжект передать какой-то простой тип (любое поле таблицы, например Стринговое) а в функции тоже отлови его (вместо обжекта) и посмотри - передастся или нет?

Не передает он нифига.

Цитата(Servena @  15.11.2007,  16:57 Найти цитируемый пост)
Вообще удали это:
    
Код

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

Без этого выдает ошибку 
Цитата

The GridView 'GridView1' fired event RowUpdating which wasn't handled.


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


Опытный
**


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

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



Удали декларацию этой функции из элемента ДатаГрид.
PM MAIL   Вверх
Nickname
Дата 15.11.2007, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(Servena @  15.11.2007,  17:25 Найти цитируемый пост)
Удали декларацию этой функции из элемента ДатаГрид. 

Удалил - та же песня.
PM MAIL   Вверх
Servena
Дата 15.11.2007, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Сейчас попробую пример подготовить с обжектдатасурс..
PM MAIL   Вверх
Nickname
Дата 15.11.2007, 18:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Могу свой скинуть для примераsmile
PM MAIL   Вверх
Servena
Дата 15.11.2007, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вобщем, так.
1. Создай новый проект(веб-сайт), с с-шарповским файлом делать ничего не нужно, а аспх-файл такой:
Код

<asp:GridView ID="GridView1" runat="server" DataSourceID="ObjectDataSource1" AutoGenerateColumns="False" BackColor="White"       BorderColor="#CCCCCC" BorderStyle="None" BorderWidth="1px" CellPadding="3" DataKeyNames="RegionID">
        <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 DataField="RegionID" HeaderText="RegionID" ReadOnly="True" SortExpression="RegionID" />
            <asp:BoundField DataField="RegionDescription" HeaderText="RegionDescription" SortExpression="RegionDescription" />
        </Columns>
    </asp:GridView>
        
    <asp:ObjectDataSource ID="ObjectDataSource1" runat="server" TypeName="ClassLibrary1.ClassUpdate"
        SelectMethod="LoadAll" UpdateMethod="Update">
        <UpdateParameters>            
        </UpdateParameters>        
    </asp:ObjectDataSource>


Теперь, добавь к решению новый проект - библиотеку (класс лайбрери), код такой:
Код

namespace ClassLibrary1
{
    public class ClassUpdate
    {
        public static void Update(String RegionDescription,int RegionID)
        {            
        }

        public static DataTable LoadAll()
        {
            DataTable dt = new DataTable();
            string queryString ="SELECT RegionID, RegionDescription FROM dbo.Region;";
            using (SqlConnection connection = new SqlConnection("Data Source=EWS2;Initial Catalog=Northwind;User ID=sa;Password=sa123;"))
            {
                SqlCommand command = new SqlCommand(queryString, connection);
                connection.Open();
                SqlDataReader reader = command.ExecuteReader();
                dt.Load(reader);
                reader.Close();
            }
            return dt;
        }
    }
}

Откомпилируй, и в основном проекте добавь ссылку на нее (Адд референс в свойствах проекта).

Здесь в функции ЗагрузитьВсе - получаем все данные с таблицы Регионы БД Носвинд.
Нас интересует функция Апдейт - туда ставим брейк. И видим, что когда в таблице нажмем Едит, потом Обновить - Мы попадаем в эту функцию. В RegionID - Айди записи, в RegionDescription - измененная запись.

В эксперименте выяснилось, что <UpdateParameters> - не обязательны. Среда и так знает, что передавать.


PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Любитель
Mymik
mr.DUDA

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

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

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


 




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


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

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