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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> не вызывается режим редактирования GridView 
:(
    Опции темы
alir
Дата 26.12.2006, 19:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Есть GridView, в ней объявил событие RowEditing.
Код

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>
<asp:GridView ID="CompanyView" runat="server"... OnRowEditing="CompanyView_RowEditing">
...

Код

protected void CompanyView_RowEditing(object sender, GridViewEditEventArgs e)
 { }

По идее он, при нажатии на ссылку edit, должен вызваться режим редактирования, но он не вызывается, а просто происходит обновление страницы.

На самом деле иногда он вызывался, но потом совсем перестал. Даже после обновления aspnet_wp.exe.
PM MAIL ICQ   Вверх
Mymik
Дата 26.12.2006, 19:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



alir, у тебя на кнопке Edit что ты создал где-то внутри GridView стоит CommandName="Edit" ??? и еще у тебя должны быть  поля EmptyDataTemplate если ты собираешься редактировать данные средствами данного GridView.


--------------------
ICQ ::            857-857
E-mail ::         mymik[at]inbox[dot]ru 
HomaPage ::  http://localhost/

:to_become_senile  :this
PM MAIL WWW ICQ   Вверх
alir
Дата 27.12.2006, 00:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

у тебя на кнопке Edit что ты создал где-то внутри GridView стоит CommandName="Edit" ???

Это как? Edit так создаю: 
Код

<asp:CommandField EditText="Edit" ShowEditButton="True" />


Цитата

и еще у тебя должны быть  поля EmptyDataTemplate если ты собираешься редактировать данные средствами данного GridView.

Это где и зачем это?
PM MAIL ICQ   Вверх
Mymik
Дата 27.12.2006, 10:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Цитата(alir @  27.12.2006,  00:00 Найти цитируемый пост)
Цитата

и еще у тебя должны быть  поля EmptyDataTemplate если ты собираешься редактировать данные средствами данного GridView.

Это где и зачем это? 

Sorry тут я лажанулся :о) я занимался своим делом и у меня в буфере была эта строка, а первая буква совпадает с тем что я хотел написать и я не заметил случайно :о)

Код

    <asp:GridView ID="test" runat="server">
        <Columns>
            <asp:TemplateField>
                <ItemTemplate>
                     <!-- Тут ты располагаешь все выводы данных типа Eval("ID")-->
                        <%# Eval("name") %>
                    <asp:Button CommandName="Edit" runat="server" />
                </ItemTemplate>
                <EditItemTemplate>
                     <!-- Тут располагаются поля которые будут отображаться при редактировании, т.е. ты можешь написать так -->
                      <asp:TextBox id="txtEditName" Text='Eval("name")' runat="server" />
                </EditItemTemplate>
            </asp:TemplateField>
        </Columns>
    </asp:GridView>


Вот так вот это делается, чтобы все это сохранить, тебе нужно будет еще одна кнопка в GridView с CommandName="Update". И надо будет еще определить метод для OnRowUpdating (OnRowUpdated срабатывает после OnRowUpdating)


--------------------
ICQ ::            857-857
E-mail ::         mymik[at]inbox[dot]ru 
HomaPage ::  http://localhost/

:to_become_senile  :this
PM MAIL WWW ICQ   Вверх
alir
Дата 27.12.2006, 14:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Mymik
Если делать как ты говоришь, то вылетает ошибка:
Цитата

Invalid postback or callback argument.  Event validation is enabled using <pages enableEventValidation="true"/> in configuration or <%@ Page EnableEventValidation="true" %> in a page.  For security purposes, this feature verifies that arguments to postback or callback events originate from the server control that originally rendered them.  If the data is valid and expected, use the ClientScriptManager.RegisterForEventValidation method in order to register the postback or callback data for validation. 


На самом деле определение события OnRowEditing должно сразу вызывать режим редактирования с кнопками update и cancel. Сначала он так и делал, но потом перестал, и я не понимаю почему.

PM MAIL ICQ   Вверх
Mymik
Дата 27.12.2006, 14:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


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

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



Так и не смог вспомнить :о(... я как-то раньше делал просто через CommandName...
Вобщем вот другое решение -->>
Код

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:GridView ID="gvTest" OnRowEditing="gvTest_RowEditing" OnRowUpdating="gvTest_RowUpdating" 
             OnRowCancelingEdit="gvTest_RowCancelingEdit" AutoGenerateColumns="false" runat="server">
            <Columns>
                <asp:TemplateField HeaderText="Name">
                    <ItemTemplate>
                        <%# HttpUtility.HtmlDecode(Eval("name").ToString()) %>
                    </ItemTemplate>
                    <EditItemTemplate>
                        <asp:TextBox ID="txtEditName" Text='<%# Eval("name")%>' runat="server" />
                    </EditItemTemplate>
                    
                </asp:TemplateField>
                <asp:CommandField EditText="edit" ShowEditButton="true" ButtonType="Button" />
            </Columns>
        </asp:GridView>
    </div>
    </form>
</body>
</html>


Код

using System;
using System.Data;
using System.Configuration;
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;

public partial class _Default : System.Web.UI.Page 
{
    private static DataTable table = new DataTable();

    protected void Page_Load(object sender, EventArgs e)
    {
        if (!IsPostBack)
            CreateTable();
    }

    private void CreateTable()
    {
        DataColumn col = new DataColumn();
        col.ColumnName = "name";
        col.DataType = typeof(string);
        table.Columns.Add(col);

        for (int i = 0; i < 10; i++)
        {
            DataRow row = table.NewRow();
            row["name"] = "name" + i.ToString();

            table.Rows.Add(row);
        }
        DataBind();
    }
    protected void gvTest_RowEditing(object sender, GridViewEditEventArgs e)
    {
        gvTest.EditIndex = e.NewEditIndex;
        DataBind();
    }

    protected void gvTest_RowUpdating(object sender, GridViewUpdateEventArgs e)
    {
        table.Rows[e.RowIndex]["name"] = HttpUtility.HtmlEncode(((TextBox)(gvTest.Rows[e.RowIndex].FindControl("txtEditName"))).Text);
        gvTest.EditIndex = -1;
        DataBind();
    }
    protected void gvTest_RowCancelingEdit(object sender, GridViewCancelEditEventArgs e)
    {
        gvTest.EditIndex = -1;
        DataBind();
    }
    public override void  DataBind()
    {
        gvTest.DataSource = table;
        gvTest.DataBind();
        base.DataBind();
    }
}



Это сообщение отредактировал(а) Mymik - 27.12.2006, 16:11


--------------------
ICQ ::            857-857
E-mail ::         mymik[at]inbox[dot]ru 
HomaPage ::  http://localhost/

:to_become_senile  :this
PM MAIL WWW ICQ   Вверх
alir
Дата 10.1.2007, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Подход имеет место быть, но вручную добавлять поля редактирования для каждой ячейки не катит, ведь грид все это долже делать сам. 
Проблема так и не решена. Вот в MSDN:
GridView.RowEditing Event 
Цитата

Occurs when a row's Edit button is clicked, but before the GridView control enters edit mode. 

У меня он в режим редактирования не переходит (просто происходит обновление страницы), а должен.
Что надо сделать, чтобы он его выполнил? Подскажите плз.
PM MAIL ICQ   Вверх
dazy
Дата 10.1.2007, 21:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(alir @  27.12.2006,  17:41 Найти цитируемый пост)
На самом деле определение события OnRowEditing должно сразу вызывать режим редактирования с кнопками update и cancel.

Сомневаюсь. Скорее даже наоборот. Если определена какая либо команда, которая перерводит таблицу в режим редактирования, то происходит событие OnRowEditing, добаляя код в это событие ты вносишь свою логику в это действо.
Поэтому Mymik верно говорит, в том плане, что у тебя внутри Грида должна быть кнопка у которой свойство CommandName = "Edit"; такого плана
Код

        <asp:GridView ID="GridView1" runat="server">
            <Columns>
                <asp:ButtonField CommandName="Edit" Text="Button" />
            </Columns>
        </asp:GridView>

Так же верно, что такие кнопки (поля) придется добавлять для команд update и cancel (insert грид не поддерживает, но можно эмулировать). Но можно воспользоваться возможностью грида автоматом добавлять эти поля. Для  этого нужно связать грид с датасорсом и тогда появляется возможность автоматом добавлять пейджинг, редактирование, сортировку.
Ты покажи код своей таблицы целиком, и покажи где ты вызываешь режим редактирования, может найдем в чем проблема....

Цитата

Occurs when a row's Edit button is clicked, but before the GridView control enters edit mode. 


Все очень просто, значит у тебя не происходит a row's  Edit button is clicked, т.е. то на чем ты кликаешь, не есть a row's  Edit button
PM MAIL   Вверх
alir
Дата 11.1.2007, 16:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ну вот, например, если так делать, тоже режим не включается:

Код

 <asp:GridView ID="CompanyView" runat="server" OnRowEditing="CompanyView_RowEditing">
            <Columns>
                <asp:ButtonField CommandName="Edit" Text="Button" />
            </Columns>
</asp:GridView>

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


Опытный
**


Профиль
Группа: Участник
Сообщений: 743
Регистрация: 7.9.2005
Где: Саратов, ул. Поса дского, 298

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



Код

<%--  Display the data in the body of the page. --%>
<body style="font: 10pt verdana">
   <form runat="server">
      <h3><font face="Verdana">Updating a Row of Data.</font></h3>
      <span id="Message" EnableViewState="false" 
         style="font:arial 11pt;" runat="server"/><p>
      <ASP:DataGrid id="MyDataGrid" runat="server"
         Width="800"
         BackColor="#ccccff" 
         BorderColor="black"
         ShowFooter="false" 
         CellPadding=3 
         CellSpacing="0"
         Font-Name="Verdana"
         Font-Size="8pt"
         HeaderStyle-BackColor="#aaaadd"
         OnEditCommand="MyDataGrid_Edit"
         OnCancelCommand="MyDataGrid_Cancel"
         OnUpdateCommand="MyDataGrid_Update"
         DataKeyField="au_id"
      >
      <Columns>
         <ASP:EditCommandColumn EditText="Edit" CancelText="Cancel" 
            UpdateText="Update"/>
      </Columns>
   </ASP:DataGrid>
</form>
</body>

Код отсюда - MSDN
Для того, чтобы вызывался режим редактироваия DataGrid, получается, нужна процедура MyDataGrid_Edit, которую можно найти по той же ссылке
Код

 public void MyDataGrid_Edit(Object sender, DataGridCommandEventArgs E)
   {
      MyDataGrid.EditItemIndex = (int)E.Item.ItemIndex;
      BindGrid();
   }


Это сообщение отредактировал(а) Naum - 11.1.2007, 17:19


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

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

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

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


 




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


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

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