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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> GridView- Update row, как отредактировать запись 
:(
    Опции темы
LightVolk
Дата 25.7.2013, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Добрый день!

Создал таблицу GridView в ASP.NET . Сейчас она успешно показывает список пользователей, при нажатии на кнопку Edit - перегружает 
страницу и предлагает отредактировать запись.
Но вот как заставить ее апдейтить ее?


Вот форма:
Код



asp:GridView ID="GridView1" runat="server"  onrowediting="GridView1_RowEditing" AllowSorting="true"
      AutoGenerateColumns="false"   CellPadding="4" 
      EnableModelValidation ="True" ForeColor="#333333"
     OnRowUpdating ="GridView1_RowUpdating"
     GridLines="None" OnSelectedIndexChanged="GridView1_SelectedIndexChanged" Width="315px" >
    <AlternatingRowStyle BackColor="White" />
    <EditRowStyle BackColor="#2461BF" />
    <FooterStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
    <HeaderStyle BackColor="#507CD1" Font-Bold="True" ForeColor="White" />
    <PagerStyle BackColor="#2461BF" ForeColor="White" HorizontalAlign="Center" />
    <RowStyle BackColor="#EFF3FB" />
    <SelectedRowStyle BackColor="#D1DDF1" Font-Bold="True" ForeColor="#333333" />
  

    <Columns>
                    <asp:CommandField 
                       ShowEditButton="True" ></asp:CommandField>

        
          <asp:boundfield datafield="ID"
            headertext="ID" />
          <asp:boundfield datafield="FirstName"
            headertext="FirstName"/>
          <asp:boundfield datafield="LastName"
            headertext="LastName"/>
          <asp:boundfield datafield="City"
            headertext="City"/>
          <asp:boundfield datafield="Email"
            headertext="Email"/>
         
    </Columns>
                                        
    
</asp:GridView>

Ничего особенного.

Вот как я ловлю события в коде:

Код

 protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {
           
            // Retrieve the row being edited.
            int index = GridView1.EditIndex;
            GridViewRow row = GridView1.Rows[index];
            
            DataRow drow;
           // data.Rows.InsertAt(row, index);
            Label1.Text = "GridView1_RowUpdating go!";
          
         }
          
        
        protected void GridView1_RowEditing(object sender, GridViewEditEventArgs e)
        {
            Label1.Text = "GridView1_RowEditing go!";
           
            GridView1.EditIndex =e.NewEditIndex;
            GridView1.DataSource = data;
            GridView1.DataBind();
        }

Пытаюсь изменить объект DataTable data - удалить старую строку,а затем добавить ее же ,но уже измененную.
Но ничего не выходит.

Подскажите пожалуйста, как решить эту проблему?

Спасибо.


П.С. порылся на форумах, откопал функцию преобразования GridViewRow в DataRow.
Код

 public static DataRow GridViewRowToDataRow(GridViewRow gvr)
        {
            object di = null;
            DataRowView drv = null;
            DataRow dr = null;

            if (gvr != null)
            {
                di = gvr.DataItem as System.Object;
                if (di != null)
                {
                    drv = di as System.Data.DataRowView;
                    if (drv != null)
                    {
                        dr = drv.Row as System.Data.DataRow;
                    }
                }
            }

            return dr;
        }


Написал еще немного кода, но все равно в Sharepoint выдает ошибку:
Код

  protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {
           
            // Retrieve the row being edited.
            int index = GridView1.EditIndex;
            GridViewRow row = GridView1.Rows[index];
            DataRow drow=GridViewRowToDataRow(row);

            data.Rows.RemoveAt(index);
            data.Rows.InsertAt(drow, index);
           
            GridView1.DataSource = data;
            GridView1.DataBind();
            Label1.Text = "GridView1_RowUpdating go!";
          
         }
]

Немного накодил метод апдейта, правда он пока что не работает:

Код

protected void GridView1_RowUpdating(object sender, GridViewUpdateEventArgs e)
        {
           

            DataTable dt = (DataTable)Page.Session["Table"];
            GridViewRow row = GridView1.Rows[e.RowIndex];
            dt.Rows[row.DataItemIndex]["ID"] = ((TextBox)(row.Cells[1].Controls[0])).Text;
            dt.Rows[row.DataItemIndex]["FirstName"] = ((TextBox)(row.Cells[2].Controls[0])).Text;
            dt.Rows[row.DataItemIndex]["LastName"] = ((TextBox)(row.Cells[3]).Controls[0]).Text;
            dt.Rows[row.DataItemIndex]["City"] = ((TextBox)(row.Cells[4]).Controls[0]).Text;
            dt.Rows[row.DataItemIndex]["Email"] = ((TextBox)(row.Cells[5]).Controls[0]).Text;
            
            GridView1.EditIndex = -1;
            GridView1.DataBind();

            String connectionString=getConnectionString();
            String query=getQuery();
            person.setAllPersonIntoDB(connectionString, query, dt);
            Label1.Text = "GridView1_RowUpdating go!";
          
            
         }

public void setAllPersonIntoDB(String connectionString, String query, DataTable data)
        {
            using (SqlConnection connection = new SqlConnection())
            {
                connection.ConnectionString = connectionString;
                SqlDataAdapter dataAdapter = new SqlDataAdapter(
                    query,connection
                    );
                dataAdapter.Update(data);
                connection.Close();
            }
        }


В функции setAllPerson и происходит вылет...

Это сообщение отредактировал(а) LightVolk - 26.7.2013, 09:49
PM MAIL   Вверх
Doss
Дата 30.7.2013, 09:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Вам нужно 1. Если Вы используете события GRIDVIEW и хотите ввести данные через события грида, то нужно использовать FindControl("наименование контрола в гриде"). А этот контрол должен быть преобразован в гриде в редактируемые вид. Это делается в коллекции столбцов грида
Они приобретут вид
Код

 <asp:GridView ID="GridView1" runat="server" AllowPaging="True" AllowSorting="True"
                CellPadding="4" EnablePersistedSelection="True" ForeColor="#333333" Height="542px"
                HorizontalAlign="Center" Width="1057px" DataKeyNames="id" AutoGenerateColumns="False"
                DataSourceID="ObjectDataSource15" OnRowCreated="GridView1_RowCreated" OnSelectedIndexChanged="GridView1_SelectedIndexChanged"
                EmptyDataText="Данных нет" ShowHeaderWhenEmpty="True" 
                onrowcommand="GridView1_RowCommand" PageSize="6" 
                onrowdatabound="GridView1_RowDataBound">
                <AlternatingRowStyle BackColor="White" ForeColor="#284775" Height="15px" />
                <Columns>
                    <asp:TemplateField ShowHeader="False">
                        <ItemTemplate>
                            <asp:LinkButton ID="libVibor" runat="server" CausesValidation="False" CommandName="Select"
                                Text="Выбор"></asp:LinkButton>
                        </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="id" ShowHeader="False" Visible="False">
                        <EditItemTemplate>
                            <asp:TextBox ID="TextBox2" runat="server" Text='<%# Bind("id") %>'></asp:TextBox>
                        </EditItemTemplate>
                        <ItemTemplate>
                            <asp:Label ID="lblID" runat="server" Text='<%# Bind("id") %>'></asp:Label>
                        </ItemTemplate>
                    </asp:TemplateField>


Далее ишешь по id в нашем случае ID="lblID" находим и его значение пихаем в базу...

Второе, что более изящнее и быстрее, это использовать ObjectDataSource
Создать класс с методами добавить удалить изменить и т.д.
Добавить их ObjectDataSource и гриду  указать на этот ObjectDataSource. Все просто!
PM MAIL   Вверх
LightVolk
Дата 31.7.2013, 09:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Doss @ 30.7.2013,  09:06)


Второе, что более изящнее и быстрее, это использовать ObjectDataSource
Создать класс с методами добавить удалить изменить и т.д.
Добавить их ObjectDataSource и гриду  указать на этот ObjectDataSource. Все просто!

Спасибо!

Попробую!
PM MAIL   Вверх
Doss
Дата 2.8.2013, 11:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



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

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

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

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


 




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


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

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